Linux: Operações com Arquivos e Diretórios

No terminal Linux, criar, copiar, mover e excluir arquivos é apenas alguns toques de tecla — mais rápido e preciso do que usar o mouse.

📋 Pré-requisitos: Você deve primeiro concluir

1. O Que Você Vai Aprender


2. Alex Aprende a Criar uma Estrutura de Projeto Inteira em Uma Linha

(1) O Problema: Criar Diretórios Camada por Camada com Cliques Direitos

Alex queria criar a estrutura de diretórios de um projeto: myblog/src/css, myblog/src/js, myblog/docs. No Windows precisava clicar com o botão direito → Nova Pasta, criando cada camada manualmente — trabalho repetitivo toda vez.

(2) Um Comando Cria a Estrutura Inteira

O engenheiro sênior Bob digitou uma linha no terminal:

BASH
mkdir -p myblog/{src/{css,js,img},docs}

Depois de apertar Enter, tree myblog mostrou:

TEXT

myblog/
├── src/
│   ├── css/
│   ├── js/
│   └── img/
└── docs/

Alex ficou maravilhado. Finalmente entendeu por que os desenvolvedores adoram o terminal.

(3) O Benefício: Eficiência Operacional Dispara

Depois de aprender os cinco comandos de operação de arquivos, a velocidade do Alex para criar e organizar arquivos foi de "minutos" para "segundos".


3. Pontos-Chave

(1) touch — Criar Arquivos ou Atualizar Timestamps

BASH
touch filename

Se o arquivo não existir, touch cria um arquivo vazio. Se existir, os horários de acesso e modificação são atualizados para o horário atual.

(2) mkdir — Criar Diretórios

BASH
mkdir dirname          # Criar um único diretório
mkdir -p a/b/c         # Criação recursiva (cria automaticamente os diretórios pai se não existirem)
mkdir dir1 dir2 dir3   # Criar vários diretórios de uma vez
mkdir -p src/{css,js}  # Expansão de chaves para criação em lote
💡 Dica: mkdir -p combinado com a expansão de chaves {a,b,c} é uma combinação poderosa do bash — mkdir -p projeto/{src/{css,js},docs} cria toda uma árvore de diretórios do projeto em uma única linha, muito mais rápido do que criar cada camada individualmente.

(3) cp — Copiar

BASH
cp source destination          # Copiar um arquivo
cp -r source_dir dest_dir      # Copiar diretório recursivamente
cp -i source destination       # Modo interativo (confirma antes de sobrescrever)
cp -u source destination       # Copiar apenas se a origem for mais recente
cp -v source destination       # Mostrar progresso da cópia
cp -p source destination       # Preservar atributos do arquivo (permissões/timestamps)

(4) mv — Mover e Renomear

BASH
mv oldname newname             # Renomear
mv file.txt /caminho/para/destino/  # Mover arquivo para outro diretório
mv dir1 dir2                   # Renomeia se dir2 não existir; move para dentro se existir
mv -i source dest              # Confirmar antes de sobrescrever
mv -u source dest              # Mover apenas se a origem for mais recente

(5) rm — Excluir

BASH
rm file.txt                    # Excluir um arquivo
rm -r dirname                  # Excluir diretório recursivamente
rm -f file.txt                 # Forçar exclusão (sem prompt de confirmação)
rm -i file.txt                 # Modo interativo (confirmar antes de excluir)
rm -rf dirname                 # Exclusão recursiva forçada (⚠️ combinação perigosa)
⚠️ Aviso de Segurança: rm -rf / excluirá todo o sistema. Nunca execute rm -rf / como root. Adote o hábito de usar -i nas operações do dia a dia.

⚠️ Nota: Arquivos excluídos com rm -rf não vão para a lixeira e não podem ser recuperados por meios normais. Antes de usar rm -rf, sempre confirme seu diretório atual (pwd) e o caminho que está excluindo, para evitar exclusão acidental. Considere adicionar alias rm='rm -i' ao seu .bashrc como rede de segurança.

Característica Link físico (hard link) Link simbólico (symlink)
Comando ln target link_name ln -s target link_name
Inode Igual ao do arquivo original Diferente
Entre sistemas de arquivos Não Sim
Pode linkar diretórios Não Sim
Após excluir o original O link continua funcionando O link quebra (link pendente)
Tamanho do arquivo Igual ao do original Armazena apenas a string do caminho
TEXT
# Link físico
ln original.txt hardlink.txt

# Link simbólico
ln -s /usr/bin/python3 python3

(7) ▶ Exemplo: Criar Arquivos e Diretórios

BASH
# Criar arquivos vazios
touch index.html
touch style.css script.js    # Criar vários de uma vez

# Criar diretórios
mkdir projetos
mkdir -p projetos/web/src/css    # Criar recursivamente diretórios aninhados

# Expansão de chaves (recurso do bash)
mkdir -p {2024,2025,2026}/{01,02,03}
# Cria: 2024/01, 2024/02, 2024/03, 2025/01, ...

Saída:

TEXT
2024:
01  02  03
2025:
01  02  03
2026:
01  02  03

(8) ▶ Exemplo: Copiar Arquivos

BASH
# Copiar um único arquivo
cp index.html index.backup.html

# Copiar um diretório (requer -r)
cp -r projetos projetos-backup

# Modo interativo para evitar sobrescrita acidental
cp -i importante.txt /backup/

# Preservar atributos do arquivo
cp -p config.conf /backup/

Saída:

TEXT
cp: overwrite '/backup/importante.txt'? n

(9) ▶ Exemplo: Mover e Renomear

BASH
# Renomear um arquivo
mv relatorio-antigo.md relatorio-2026.md

# Mover para outro diretório
mv relatorio.md ~/Documents/relatorios/

# Renomear em lote (usando um loop)
for f in *.html; do mv "$f" "${f%.html}.htm"; done

Saída:

TEXT
(Sem saída, o arquivo foi renomeado)

(10) ▶ Exemplo: Exclusão Segura

TEXT
# Segurança em primeiro lugar: modo interativo
rm -i arquivo.txt

# Excluir um diretório vazio
rmdir diretorio-vazio

# Excluir um diretório não vazio
rm -r projeto-antigo/

# Usar com cautela (exclui sem pedir confirmação)
rm -f temp.log

(11) ▶ Exemplo: Operações em Lote com Curingas

BASH
# Copiar todos os arquivos .jpg
cp *.jpg ~/Pictures/

# Excluir todos os arquivos temporários .tmp
rm *.tmp

# Mover arquivos que começam com 2024
mv 2024* ~/arquivo/

# Listar arquivos que terminam com um dígito
ls *[0-9]

Saída:

TEXT
relatorio2024.md  log2025.txt  backup1.tar.gz

(12) ▶ Exemplo Abrangente: Criar uma Estrutura Completa de Diretórios de Projeto

BASH
# Alex cria o projeto de blog dele (uma linha faz tudo)
mkdir -p myblog/{src/{css,js,img},docs,scripts,test}

# Criar um arquivo HTML index dentro de src
touch myblog/src/index.html

# Copiar como backup
cp -r myblog myblog-backup

# Renomear o diretório de backup
mv myblog-backup myblog-2026-07

# Ver a estrutura final
find myblog -type f -o -type d | sort

❓ Perguntas Frequentes

P: rm -rf / realmente exclui todo o sistema? R: \1

P: Qual é a diferença entre cp e mv ao operar em diretórios? R: cp exige a flag -r para copiar diretórios (recursivo). mv não precisa — mover um diretório usa o mesmo comando de mover um arquivo. Se o diretório de destino não existir, mv renomeia; se existir, a origem é movida para dentro dele.

P: Como lidar com nomes de arquivo que contêm espaços? R: \1

P: Como renomear vários arquivos em lote? R: Use um loop for: for f in *.jpg; do mv "$f" "prefixo_$f"; done, ou a ferramenta dedicada rename: rename 's/\.jpg$/\.png/' *.jpg.

P: O que acontece se eu excluir o arquivo original de um link simbólico? R: O symlink se torna um "link quebrado" — ls -l mostrará o nome piscando em vermelho, e acessá-lo gerará um erro No such file or directory. Links físicos não são afetados (porque apontam diretamente para o inode do arquivo original).


📖 Resumo


📝 Exercícios

  1. Básico (Dificuldade ⭐): Use mkdir -p para criar a árvore de diretórios linux/tarefas/{t1,t2,t3}/{src,docs}, e use expansão de chaves para criar main.py em cada subdiretório src de t
  2. Intermediário (Dificuldade ⭐⭐): Copie t3 como t4 e verifique, depois exclua t1/src/main.py e use rm -r para excluir o diretório t2 inteiro
  3. Avançado (Dificuldade ⭐⭐⭐): Crie um link simbólico apontando para /etc/hostname e verifique-o, depois escreva um one-liner usando find para localizar todos os arquivos main.py que você criou e renomeie-os em lote para main.sh
Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%