Manipulando arquivos e diretórios
Esta aula ensina comandos essenciais para manipular arquivos e diretórios no Bash: cp, mv, rm, mkdir, rmdir e touch. Aborda também cuidados importantes ao usar rm para evitar perda de dados.
Nesta aula, você aprenderá os comandos fundamentais para criar, copiar, mover e remover arquivos e diretórios no terminal Linux. Dominar essas operações é essencial para administrar sistemas e automatizar tarefas com scripts.
Além da sintaxe básica, veremos opções comuns e boas práticas para evitar acidentes, especialmente com o comando rm. Ao final, você será capaz de gerenciar arquivos e pastas com confiança.
cp, mv, rm
Os comandos cp, mv e rm são os pilares da manipulação de arquivos. cp copia arquivos ou diretórios, mv move (ou renomeia) e rm remove.
cp: Sintaxe básica: cp origem destino. Se o destino for um diretório existente, o arquivo é copiado para dentro dele. Use -r (recursivo) para copiar diretórios inteiros. Exemplo: cp -r /home/user/docs /backup.
# Copiar arquivo para diretório existente
cp arquivo.txt /tmp/
# Copiar diretório recursivamente
cp -r pasta /tmp/
# Copiar preservando atributos (modo, timestamp)
cp -p arquivo.txt novo.txtmv: Move ou renomeia. Sintaxe: mv origem destino. Se o destino for um diretório, move o arquivo para lá; caso contrário, renomeia. Exemplo: mv arquivo.txt novo_nome.txt.
# Renomear arquivo
mv antigo.txt novo.txt
# Mover arquivo para diretório
mv arquivo.txt /tmp/
# Mover diretório
mv pasta /tmp/rm: Remove arquivos. Sintaxe: rm arquivo. Use -r para diretórios e -f para forçar (suprimir confirmações). Cuidado: a exclusão é permanente!
# Remover arquivo
rm arquivo.txt
# Remover diretório recursivamente
rm -r pasta/
# Forçar remoção sem confirmação
rm -rf pasta/mkdir e rmdir
mkdir cria diretórios e rmdir remove diretórios vazios. São comandos simples, mas com opções úteis.
mkdir: Sintaxe: mkdir nome_dir. Use -p para criar diretórios intermediários (pais) automaticamente. Exemplo: mkdir -p a/b/c cria a, depois b dentro de a, depois c dentro de b.
# Criar diretório simples
mkdir nova_pasta
# Criar diretório com subdiretórios
mkdir -p projetos/2024/janeiro
# Definir permissões ao criar (modo octal)
mkdir -m 700 pasta_secretarmdir: Remove apenas diretórios vazios. Se o diretório contiver arquivos, o comando falha. Para remover diretórios não vazios, use rm -r.
# Remover diretório vazio
rmdir pasta_vazia
# Tentar remover diretório com conteúdo (falha)
rmdir pasta_cheia # erro: diretório não vaziotouch
touch é usado principalmente para criar arquivos vazios ou atualizar timestamps (data de modificação e acesso) de arquivos existentes.
Sintaxe: touch arquivo. Se o arquivo não existir, ele é criado. Se existir, seus timestamps são atualizados para o horário atual. Opções comuns: -a (altera apenas acesso), -m (altera apenas modificação), -t (define timestamp específico).
# Criar arquivo vazio
touch novo_arquivo.txt
# Atualizar timestamp de arquivo existente
touch existente.txt
# Definir timestamp específico (formato [[CC]YY]MMDDhhmm[.ss])
touch -t 202401011200.00 arquivo.txtCuidados com rm
O comando rm é poderoso e perigoso. Uma exclusão acidental pode ser catastrófica, especialmente com rm -rf. Aqui estão boas práticas:
- Sempre verifique o diretório atual antes de usar
rm -rf *. Usepwdpara confirmar. - Use opções interativas:
-ipergunta antes de cada remoção. Exemplo:rm -i arquivo.txt. - Evite usar
rm -rfem scripts sem proteção. Considere mover para lixeira (mv para ~/.local/share/Trash) ou usartrash-cli. - Cuidado com variáveis vazias: Se uma variável estiver vazia,
rm -rf $VAR/*pode se tornarrm -rf /*. Sempre valide variáveis. - Use aliases seguros: Adicione
alias rm='rm -i'no~/.bashrcpara sempre pedir confirmação.
# Exemplo de risco com variável vazia
pasta=""
rm -rf $pasta/* # Remove tudo no diretório raiz (se executado como root)
# Uso seguro: validar antes
if [[ -n "$pasta" ]]; then
rm -rf "$pasta"/*
fiBoas práticas
Sempre use aspas em caminhos com espaços e valide variáveis. Prefira cp -i e mv -i para evitar sobrescritas acidentais. Considere usar rsync para cópias mais complexas.
Referências
- GNU Coreutils: cp
- GNU Coreutils: mv
- GNU Coreutils: rm
- GNU Coreutils: mkdir
- GNU Coreutils: rmdir
- GNU Coreutils: touch
Exercícios
Crie um diretório chamado
teste, dentro dele crie um arquivo vazioa.txtusandotouch. Depois copiea.txtparab.txtno mesmo diretório.✓ Resposta:mkdir teste cd teste touch a.txt cp a.txt b.txtUsando um único comando
mkdir, crie a estrutura de diretóriospasta1/subpasta1/pasta2.✓ Resposta:mkdir -p pasta1/subpasta1/pasta2Renomeie o arquivo
dados.txtparabackup.txtusandomv.✓ Resposta:mv dados.txt backup.txtRemova o diretório vazio
lixousandormdir. O que acontece se ele não estiver vazio?✓ Resposta:rmdir lixo # Se não estiver vazio, exibe erro: "rmdir: failed to remove 'lixo': Directory not empty"Explique por que o comando
rm -rf $DIR/*pode ser perigoso se a variável$DIRestiver vazia ou não definida. Como evitar esse problema?✓ Resposta:Se$DIRestiver vazia, o comando se tornarm -rf /*, que tenta remover tudo a partir da raiz. Para evitar, sempre verifique se a variável não está vazia antes de usar, por exemplo:if [[ -n "$DIR" ]]; then rm -rf "$DIR"/* fi