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.