Manipulação de arquivos e diretórios
2 min de leitura
Criar, copiar, mover, apagar. Quatro verbos que cobrem 90% do que você faz com arquivos no dia a dia. Os comandos são óbvios (depois que você sabe que existem).
Criando: mkdir e touch
mkdir novo-dir # cria um diretório
mkdir -p caminho/longo/de/dirs # cria todos os pais necessários
mkdir -p src/{components,utils} # brace expansion: cria 2 de uma vez
touch arquivo.txt # cria vazio se não existe
touch .gitkeep # força criar arquivo "vazio"
O -p ("parents") é útil quando você cria estrutura de projeto
inteira de uma vez. Sem ele, mkdir src/components falha se
src não existe.
O touch parece bobo (só cria arquivo vazio) mas é o jeito
canônico de "garantir que esse arquivo existe" - útil em scripts
e pra criar arquivos de placeholder (.gitkeep em diretórios
que o Git ignora por estarem vazios).
Copiando: cp
cp origem destino # arquivo -> arquivo
cp origem.txt copia.txt # renomeia na cópia
cp -r diretorio/ outro/ # recursivo (essencial pra diretórios)
cp -r projeto/ projeto-backup/ # copia a pasta inteira
cp *.txt backup/ # copia todos os .txt
Cuidado:
cpsobrescreve sem perguntar. Use-i(interactive) pra confirmar antes de sobrescrever. Alias comum no~/.bashrc:alias cp='cp -i'.
Movendo e renomeando: mv
mv origem destino # move (renomeia se for no mesmo dir)
mv arquivo.txt novo-nome.txt # renomeia
mv projeto/ ~/Projetos/ # move diretório
mv *.log /var/log/ # move vários
mv é o mesmo comando pra mover e renomear - não tem "rename"
separado. E é atômico: ou moveu inteiro ou não moveu (em
geral). Não precisa de -r pra diretórios.
Apagando: rm
rm arquivo.txt # apaga um arquivo
rm -i arquivo.txt # pergunta antes
rm -r diretorio/ # recursivo
rm -rf diretorio/ # recursivo + força (sem perguntar)
rm -rf / # NÃO FAÇA ISSO NUNCA
Não tem lixeira.
rmapaga pra sempre. Não dá pra "desfazer". Por isso existem as opções-i(pergunta) e--preserve-root(protege o/). Userm -ise tiver dúvida, ou melhor: use um shell com confirmação por default.Bônus: tem o
trash-clique move pra lixeira do sistema em vez de apagar. Vale instalar (brew install trashouapt install trash-cli).
Links: ln
Dois tipos. O symlink (atalho) é o que você vai usar 95% das vezes.
ln -s /caminho/origem link # cria symlink (atalho)
ln -s ~/Projetos/api api # ./api agora aponta pra ~/Projetos/api
ln -s ~/.dotfiles/vimrc ~/.vimrc # symlink pra config versionado
ln origem link # hard link (rara, arquivo bruto)
O symlink é só um arquivo com um caminho dentro. Se você apagar o
origem, o symlink fica "quebrado" (aponta pra lugar que não
existe). Útil pra ter um arquivo de config em vários lugares
sem duplicar (ex: manter ~/.vimrc e ~/.config/nvim/init.vim
apontando pro mesmo arquivo versionado no Git).
Três conceitos que você acabou de aprender:
mkdir -pcria estrutura inteira de uma vez.touchgarante que o arquivo existe, mesmo que vazio.mvé mover E renomear. Não tem "rename" separado.rm -rfé pra sempre. Sem lixeira, sem undo. Cuidado.
Dica:
cp -r projeto projeto-backupé como você faz "snapshot" rápido antes de uma mudança arriscada. Quando o shell for seu ambiente principal, isso vira reflexo - "antes de mexer, backup; depois, deleto o backup".
No próximo, vamos ler o que tem dentro dos arquivos: cat, less,
head, tail, wc e file.