Movendo arquivos e diretórios no terminal Linux

Movendo arquivos e diretórios no terminal Linux

Neste tutorial, aprenda sobre como mover arquivos e diretórios usando o comando mv no Linux.

Recortar, copiar e colar fazem parte do dia a dia da computação.

Em um tutorial anterior, você aprendeu sobre copiar arquivos e pastas (diretórios) no terminal.

Neste tutorial, você aprenderá sobre a operação de cortar e colar (mover) no terminal Linux.

Movendo ou cortando-colando?

Tudo bem! Cortar e colar não é o termo técnico correto aqui. É chamado de mover arquivos (e pastas).

Como você é novo na linha de comando, você pode achar o termo 'mover' confuso.

Quando você copia um arquivo para outro local usando o comando cp, o arquivo de origem permanece no mesmo local.

Quando você move um arquivo para outro local usando o comando mv, o arquivo de origem não permanece mais no local de origem.

Esta é a mesma operação de cortar e colar (Ctrl+X e Ctrl+V) que você faz em um explorador de arquivos gráficos.

Basicamente, mover arquivos na linha de comando pode ser pensado da mesma forma que recortar e colar em um ambiente gráfico.

Movendo arquivos

O Linux tem um comando mv dedicado (abreviação de "move") para mover arquivos e diretórios para outros locais.

E usar o comando mv é bem simples:

mv arquivo_de_origem diretorio_de_destino

O papel do caminho vem a desempenhar aqui também. Você pode usar o caminho absoluto ou relativo. O que for mais adequado à sua necessidade.

Vejamos isso com um exemplo. Você deve praticar junto com ele, replicando os cenários de exemplo em seu sistema.

Esta é a estrutura de diretórios no exemplo:

$ tree
.
├── dir1
│   ├── file_2
│   └── file_3
├── dir2
│   └── teste
├── dir3
├── arquivo_1
├── arquivo_2
└── arquivo_3

3 directories, 9 files

Agora, digamos que você queira mover o arquivo_1 para dir3.

mv arquivo_1 dir3

movendo_arquivos07-40

Movendo vários arquivos

Você pode mover vários arquivos para outro local no mesmo comando mv:

mv arquivo_1 arquivo_2 arquivo_N diretorio_de_destino

Vamos continuar nosso cenário de exemplo para mover vários arquivos.

mv file_2 file_3 file_4 dir3

movendo_arquivos09-16

Mova os arquivos de volta para o diretório atual a partir do dir3. Precisamos deles nos próximos exemplos.

Movendo arquivos com cautela

Se o destino já tiver arquivos com o mesmo nome, os arquivos de destino serão substituídos imediatamente. Às vezes, você não vai querer isso.

Assim como o comando cp, o comando mv também tem um modo interativo com opção -i.

E o propósito é o mesmo. Peça confirmação antes de substituir os arquivos no destino.

$ mv -i arquivo_3 dir1
mv: overwrite 'dir1/arquivo_3'?

Você pode pressionar N para negar a substituição e S ou Enter para substituir o arquivo de destino.

movendo_arquivos12-16

Movendo, mas apenas atualizar

O comando mv vem com algumas opções especiais. Uma delas é a opção de atualização -u.

Com isso, o arquivo de destino só será substituído se o arquivo que está sendo movido for mais recente do que ele.

mv -u nome_do_arquivo diretorio_de_destino

Aqui está um exemplo. arquivo_2 foi modificado às 21:02 e arquivo_3 foi modificado às 21:04.

movendo_arquivos13-39

Em outras palavras, no diretório de destino, o arquivo_2 é mais antigo e o arquivo_3 é mais recente do que os que estão sendo movidos.

Isso também significa que o arquivo_3 não será movido enquanto o arquivo_2 será atualizado. Você pode verificá-lo com os carimbos de data/hora dos arquivos no diretório de destino depois de executar o comando mv.

Você também pode usar a opção de backup -b. Se o arquivo de destino estiver sendo substituído, ele criará automaticamente um backup com o padrão filename~.

Solução de problemas: o destino não é um diretório

Se você estiver movendo vários arquivos, o último argumento deverá ser um diretório. Caso contrário, você encontrará este erro:

target is not a directory

Aqui, craimos um arquivo que é chamado dir. O nome soa como um diretório, mas é um arquivo. E quando tento mover vários arquivos para ele, o erro óbvio está lá:

movendo_arquivos16-32

Mas e se você mover um único arquivo para outro arquivo? Nesse caso, o arquivo de destino é substituído pelo conteúdo do arquivo de origem, enquanto o arquivo de origem é renomeado como o arquivo de destino. Mais sobre isso em seções posteriores.

Movendo diretórios

Até agora, você viu tudo sobre mover arquivos. Que tal mover diretórios?

Os comandos cp e rm usavam a opção recursiva -r para copiar e excluir pastas, respectivamente.

No entanto, não há essa exigência para o comando mv. Você pode usar o comando mv como é para mover diretórios.

mv dir diretorio_de_destino

Aqui está um exemplo em que movo o diretório dir2 para dir3. E como você pode ver, dir2 junto com seu conteúdo é movido para dir3.

movendo_arquivos18-41

Você pode mover vários diretórios da mesma maneira.

Renomeando arquivos e diretórios

Se você quiser renomear um arquivo ou diretório, poderá usar o mesmo comando mv.

mv nome_de_arquivo novo_nome_de_arquivo

Digamos que você queira renomear um arquivo no mesmo local. Aqui está um exemplo em que eu renomeio arquivo_1 para arquivo_um no mesmo diretório.

movendo_arquivos19-09

Você também pode mover e renomear os arquivos. Você só precisa fornecer o caminho do diretório e o nome do arquivo do destino.

Não é possível renomear vários arquivos diretamente com o comando mv. Você tem que combiná-lo com outros comandos como encontrar etc.

Teste seus conhecimentos

Hora de praticar o que acabou de aprender.

Crie uma nova pasta para praticar o exercício. Aqui, crie uma estrutura de diretórios como esta:

├── dir1
├── dir2
│   ├── dir21
│   ├── dir22
│   └── dir23
└── dir3

Copie o arquivo /etc/passwd para o diretório atual. Agora renomeie-o secrets.

Crie três novos arquivos chamados arquivo_1, arquivo_2 e arquivo_3. Mova todos os arquivos para dir22.

Agora mova o diretório dir22 para dir3.

Exclua todo o conteúdo do dir2 agora.

Via itsfoss.com. Você pode conferir o post original em inglês:

Terminal Basics #8: Move Files and Directories (Cut-Paste Operation)

Última atualização deste artigo: 1 de january de 2024