Manipulando arquivos e diretórios
Esta aula aborda os comandos essenciais para manipulação de arquivos e diretórios no Bash: cp, mv, rm, mkdir, rmdir e touch. Inclui exemplos práticos, explicações detalhadas e cuidados importantes com o comando rm para evitar perda acidental de dados.
Nesta aula, você aprenderá os comandos fundamentais para criar, copiar, mover e remover arquivos e diretórios no terminal Linux. Essas operações são a base do gerenciamento de arquivos em scripts e na linha de comando, e dominá-las é essencial para qualquer profissional de TI. Vamos explorar cada comando com exemplos práticos, flags comuns e boas práticas para evitar erros.
Além de entender a sintaxe, você verá como combinar esses comandos com curingas e opções para automatizar tarefas repetitivas. Ao final, terá confiança para manipular arquivos e diretórios de forma segura e eficiente.
cp, mv, rm
Os comandos cp (copy), mv (move) e rm (remove) são os mais utilizados para manipular arquivos e diretórios. Eles permitem copiar, renomear/mover e excluir itens, respectivamente. A sintaxe básica é: comando origem destino (para cp e mv) ou comando alvo (para rm).
cp: Copia arquivos ou diretórios. Por padrão, copia apenas arquivos; para copiar diretórios recursivamente, use a flag -r (ou -R). Outras flags úteis: -i (pergunta antes de sobrescrever), -u (copia apenas se origem for mais recente ou destino não existir), -v (modo verboso). Exemplo: cp -iv arquivo.txt backup/ copia com confirmação e detalhes.
mv: Move ou renomeia arquivos/diretórios. Se o destino for um diretório existente, o item é movido para dentro dele; caso contrário, é renomeado. Flags comuns: -i (pergunta antes de sobrescrever), -u (move apenas se origem for mais recente), -v (verboso). Exemplo: mv -v relatorio.pdf relatorio_antigo.pdf renomeia o arquivo.
rm: Remove arquivos ou diretórios. Cuidado: por padrão, não move para lixeira; a exclusão é permanente. Flags importantes: -i (pergunta antes de cada remoção), -r (remove recursivamente diretórios), -f (força remoção sem perguntar, mesmo se protegido). Exemplo: rm -i arquivo.txt solicita confirmação.
# Exemplos de cp, mv, rm
# Copiar arquivo para diretório
cp documento.txt Documentos/
# Copiar diretório recursivamente
cp -r Projeto/ BackupProjeto/
# Renomear arquivo
mv antigo.txt novo.txt
# Mover arquivo para diretório
mv arquivo.pdf Documentos/
# Remover arquivo com confirmação
rm -i lixo.txt
# Remover diretório recursivamente
rm -r PastaTemp/mkdir e rmdir
Os comandos mkdir (make directory) e rmdir (remove directory) são específicos para criar e remover diretórios vazios. Eles são mais seguros que rm -r para remoção de diretórios, pois rmdir só remove diretórios vazios, evitando exclusões acidentais de conteúdo.
mkdir: Cria um ou mais diretórios. Flags comuns: -p (cria diretórios pai se necessário, sem erro se já existirem), -v (verboso). Exemplo: mkdir -p projeto/src/css cria toda a estrutura de uma vez. rmdir: Remove diretórios vazios. Se o diretório contiver arquivos, o comando falha. Útil para limpeza segura. Exemplo: rmdir pasta_vazia. Para remover diretórios não vazios, use rm -r com cautela.
# Criar diretório simples
mkdir nova_pasta
# Criar estrutura aninhada
mkdir -p 2025/janeiro/relatorios
# Remover diretório vazio
rmdir nova_pasta
# Tentar remover diretório não vazio (falha)
rmdir pasta_com_arquivos # Erro: Directory not emptytouch
O comando touch é usado principalmente para criar arquivos vazios ou atualizar o timestamp (data de modificação e acesso) de arquivos existentes. Se o arquivo não existir, ele é criado vazio; se existir, suas datas são atualizadas para o momento atual. É muito útil em scripts para gerar arquivos de log, sinalizar eventos ou simplesmente criar placeholders.
Flags comuns: -a (altera apenas o tempo de acesso), -m (altera apenas o tempo de modificação), -t (define um timestamp específico no formato [[CC]YY]MMDDhhmm[.ss]). Exemplo: touch -t 202501011200.00 arquivo.txt define a data para 1º de janeiro de 2025, 12:00.
# Criar arquivo vazio
touch novo_arquivo.txt
# Atualizar timestamp de arquivo existente
touch existente.txt
# Criar múltiplos arquivos
touch arquivo1.txt arquivo2.txt arquivo3.txt
# Definir timestamp específico
touch -t 202412312359.59 ultimo_dia_ano.txtCuidados com rm
O comando rm é poderoso e perigoso. Uma exclusão acidental pode ser catastrófica, especialmente se usada com -rf (recursivo e forçado) em diretórios importantes. Diferente de interfaces gráficas, o terminal não tem lixeira — a exclusão é imediata e irreversível (a menos que você tenha backups ou snapshots de sistema de arquivos).
Boas práticas: sempre use a flag -i para confirmar remoções, especialmente em scripts ou quando estiver começando. Evite usar rm -rf com curingas como rm -rf * sem verificar o diretório atual. Considere usar trash-cli (que move para lixeira) em vez de rm para maior segurança. Em scripts críticos, valide o caminho antes de remover. Exemplo: verifique se a variável não está vazia: if [ -n "$DIR" ]; then rm -r "$DIR"; fi.
# Exemplo perigoso: rm -rf *
# NUNCA execute sem ter certeza do diretório atual
# Alternativa segura com confirmação
rm -ri pasta_importante/*
# Uso de trash-cli (se instalado)
trash arquivo.txt
# Script seguro para remover diretório
#!/bin/bash
DIR="$1"
if [ -z "$DIR" ]; then
echo "Erro: diretório não especificado"
exit 1
fi
rm -ri "$DIR"Boas práticas finais
Sempre verifique o diretório atual com pwd antes de operações destrutivas. Use aspas em nomes de arquivos com espaços. Prefira rm -i em scripts interativos e evite rm -f a menos que absolutamente necessário. Para diretórios, rmdir é mais seguro que rm -r se você tem certeza de que estão vazios. Documente comandos complexos em scripts com comentários.
Referências
- GNU Coreutils: cp invocation
- GNU Coreutils: mv invocation
- GNU Coreutils: rm invocation
- GNU Coreutils: mkdir invocation
- GNU Coreutils: rmdir invocation
- GNU Coreutils: touch invocation
- Linux man page: cp
- Linux man page: mv
- Linux man page: rm
- Linux man page: mkdir
Exercícios
Crie um diretório chamado
exercicioe dentro dele crie três arquivos vazios:a.txt,b.txt,c.txt. Em seguida, copie o arquivoa.txtpara o diretório pai com o nomea_copia.txt.✓ Resposta:mkdir exercicio cd exercicio touch a.txt b.txt c.txt cp a.txt ../a_copia.txtRenomeie o arquivo
b.txtparab_renomeado.txtdentro do diretórioexercicio. Em seguida, mova o arquivoc.txtpara o diretório pai.✓ Resposta:cd exercicio mv b.txt b_renomeado.txt mv c.txt ../Remova o diretório
exerciciousandormdir. Se falhar, explique por que e use o comando adequado para removê-lo.✓ Resposta:rmdir exerciciofalha porque o diretório não está vazio (contémb_renomeado.txt). Para remover, userm -r exercicioourm -ri exerciciopara confirmar.Crie um diretório
projetocom subdiretóriossrcedocsusando um único comando. Em seguida, dentro desrc, crie um arquivomain.shcomtouch.✓ Resposta:mkdir -p projeto/src projeto/docs touch projeto/src/main.shExplique o que o comando
rm -rf /faz e por que nunca deve ser executado. Em seguida, escreva um comando seguro para remover um diretório chamadotestecom confirmação.✓ Resposta:rm -rf /tenta remover recursivamente e forçadamente todo o sistema de arquivos a partir da raiz, o que destruiria o sistema operacional. Nunca execute isso. Comando seguro:rm -ri teste(pergunta antes de remover cada arquivo/diretório).