Aprender alguns comandos para gerenciar arquivos é um dos caminhos para ganhar produtividade no Linux e espero que este artigo ajude você a perder o medo de aprender coisas novas, especialmente no terminal.
Quase tudo o que você faz no terminal pode ser feito também por meio de uma interface gráfica, então para que aprender comandos para gerenciar arquivos pelo terminal? Continue lendo para saber como isso pode mudar a maneira como você interage com a sua distribuição Linux.
Por que eu deveria aprender comandos para gerenciar arquivos?
O domínio dos comandos para gerenciar arquivos permitirá que você acelere tarefas repetitivas através de um script, e cada comando aprendido abre portas para você automatizar a sua vida digital, por exemplo:
- Crie scripts pós-instalação e personalize a sua distribuição Linux em minutos;
- Faça backup dos seus arquivos;
- Remova arquivos temporários e limpe o seu sistema;
- Navegue mais rapidamente no terminal;
- Compartilhe o perfil de usuário de um navegador com outro compatível em dual-boot, por exemplo, faça com que o Firefox do seu Windows use o mesmo perfil do Firefox do Linux;
- Execute comandos em vários arquivos em sequência, por exemplo, redimensionando imagens.
O céu é o limite, mas, tudo começa com o seu aprendizado. Comando a comando, fazendo testes e ganhando intimidade.
Alguns dos comandos para gerenciar arquivos
Existem centenas de comandos para gerenciar arquivos, mas você precisa começar por alguns, sem se preocupar com os mais avançados, pois já chegará a hora em que você poderá dizer que é um “programador de scripts”. Vejamos alguns deles.
Nota: alguns dos comandos abaixo podem apagar arquivos ou informações relevantes para você, faça backup e teste numa máquina virtual até estar confortável e dominar o funcionamento das funções.
1. cp — Copiar arquivos e pastas
Copiar um arquivo para outro lugar definindo um nome para o arquivo de destino:
cp caminho/para/arquivo_entrada.ext caminho/para/arquivo_destino.ext
Copiar um arquivo para outra pasta, mantendo o nome:
cp caminho/para/arquivo.ext caminho/para/pasta
Copiar recursivamente o conteúdo de uma pasta para outro lugar (se o destino existe, a pasta é copiada para dentro dela):
cp -r caminho/para/pasta_fonte caminho/para/pasta_alvo
Copiar uma pasta recursivamente, mostrando detalhes do processo (modo verboso):
cp -vr caminho/para/pasta_fonte caminho/para/pasta_alvo
Copiar arquivos de texto para outro lugar, em modo interativo (exige confirmação do usuário antes de sobrescrever):
cp -i *.txt caminho/para/pasta_alvo
2. mv — Mover arquivos entre pastas ou renomeá-los
Move um arquivo para uma pasta arbitrária:
mv caminho/para/arquivo_entrada caminho/para/arquivo_destino
Move arquivos para outra pasta, mantendo os nomes dos arquivos:
mv arquivo_1 arquivo_2 arquivo_3 caminho/para/arquivo_destino
Não pedir confirmação para sobrescrever arquivos (use com cuidado):
mv -f arquivo caminho/para/arquivo_destino
Requisita confirmação para sobrescrever arquivos, independentemente das permissões dos arquivos:
mv -i arquivo caminho/para/arquivo_destino
Não sobrescreve arquivos existentes na pasta de destino:
mv -n arquivo caminho/para/arquivo_destino
3. rm — Remove arquivos ou pastas
Remove os arquivos especificados no comando:
rm caminho/para/arquivo_entrada caminho/para/outro/arquivo_entrada
Remove recursivamente uma pasta e todos os seus subdiretórios:
rm -r caminho/para/pasta
Força a remoção de uma pasta, sem pedir confirmação nem mostrar mensagens de erros:
rm -rf caminho/para/pasta
Remove vários arquivos de uma pasta, pedindo confirmação a cada um deles:
rm -ri caminho/para/pasta/*
Remove vários arquivos de uma pasta, mostrando detalhes do processo (modo verboso):
rm -v caminho/para/pasta/*
4. touch — Cria arquivos, altera data de acesso/modificação de um arquivo
Cria um arquivo:
touch -c caminho/para/arquivo.txt
Cria múltiplos arquivos:
touch -c caminho/para/arquivo{1,2,3}.txt
Cria novo(s) arquivo(s) vazio(s) ou altera data do(s) arquivo(s) para o momento atual:
touch caminho/para/arquivo
Define a data de um arquivo para uma data e hora específica:
touch -t YYYYMMDDHHMM.SS caminho/para/arquivo
Usa a data atual de um arquivo para definir a de um segundo arquivo:
touch -r caminho/para/arquivo1 caminho/para/arquivo2
5. cd — Altera a pasta de trabalho atual
Vai para a pasta informada:
cd caminho/para/pasta
Vai para o pasta home do usuário atual:
cd
Vai para o pasta pai (imediatamente anterior) da pasta atual:
cd ..
Vai para o pasta escolhida anteriormente:
cd -
6. ls — Lista o conteúdo de uma pasta
Lista um arquivo por linha:
ls -1
Lista todos os arquivos, inclusive os arquivos ocultos:
ls -a
Lista todos os arquivos, com o separador `/` adicionado ao nome das pastas:
ls -F
Lista longa (permissões, posse de arquivos, tamanho e data de modificação) de todos os arquivos:
ls -la
Lista longa com o tamanho dos arquivos registrado de forma legível (KiB, MiB, GiB, etc.):
ls -lh
Lista apenas pastas:
ls -d */
7. cat — Exibe e concatena o conteúdo de arquivos
Exibe o conteúdo de um arquivo no terminal:
cat caminho/para/arquivo
Concatena o conteúdo de vários arquivos em um arquivo de destino:
cat caminho/para/arquivo1 caminho/para/arquivo2 > caminho/para/arquivo_destino
Adicionar o conteúdo de vários arquivos ao final de um arquivo de destino:
cat caminho/para/arquivo1 caminho/para/arquivo2 >> caminho/para/arquivo_destino
Exibe o conteúdo de um arquivo no terminal numerando as linhas:
cat -n caminho/para/arquivo
8. ln — Cria links para arquivos e pastas
Cria um link simbólico para um arquivo ou pasta:
ln -s caminho/para/arquivo_ou_pasta caminho/para/link/simbólico
Sobrescreva um link simbólico (force) para apontar para outro arquivo:
ln -sf caminho/para/novo/arquivo caminho/para/link/simbólico
Crie um link físico (hard link) para um arquivo:
ln caminho/para/arquivo caminho/para/link/simbólico
9. rmdir — Remove uma pasta
Remove uma pasta se estiver vazia:
rmdir caminho/para/pasta
Remove uma pasta que não está vazia:
rm -r caminho/para/arquivo
Remove a pasta e todos os seus subdiretórios:
rmdir -p caminho/para/pasta
10. find — Encontra recursivamente arquivos ou pastas
Encontre arquivos com determinada extensão:
find caminho/para/pasta/pai -name '*.ext'
Encontre arquivos que sejam iguais a determinados padrões (onde “ext” é a extensão dos arquivos):
find caminho/para/pasta/pai -path '**/path/**/*.ext' -or -name '*pattern*'
Encontre pastas com determinado nome (independente de letras minúsculas/maiúsculas e onde “lib” é parte do nome das pastas que deseja encontrar):
find caminho/para/pasta/pai -type d -iname '*lib*'
Encontre arquivos com determinado padrão, exceto os que estejam em determinados caminhos (onde “py” é a extensão dos arquivos e “site-packages” faz parte do caminho que se deseja excluir da busca):
find caminho/para/pasta/pai -name '*.py' -not -path '*/site-packages/*'
Encontre arquivos com determinada faixa de tamanho (no caso, de 500kB até 10MB) e limite a busca para apenas um subdiretório-filho abaixo, isto é, profundidade de recursividade igual a 1):
find caminho/para/pasta/pai -maxdepth 1 -size +500k -size -10M
Execute um comando para cada arquivo encontrado (use `{}` com o comando, neste caso, o comando “wc” é executado em todo arquivo com extensão .ext):
find caminho/para/pasta/pai -name '*.ext' -exec wc -l {} \;
Encontre os arquivos modificados nos últimos 7 dias:
find caminho/para/pasta/pai -daystart -mtime -7
Encontre e exclua os arquivos vazios (0 byte):
find caminho/para/pasta/pai -type f -empty -delete
Agora chegou a sua vez de testar e aprender. Copie e faça backup de alguns arquivos e pastas, use algum dos comandos acima e vá construindo os seus scripts.
Você gosta de aprender coisas novas? Então não perca a nossa newsletter semanal sobre tecnologia e o mundo open-source.