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 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
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, 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.
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á:
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
.
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.
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.