Linux / Comandos / cp - comando para copiar, mv - comando para mover
No Linux, cp copia arquivos ou diretórios, e mv move arquivos ou diretórios ou os renomeia. O resultado de ambos os comandos difere dependendo se o caminho final é um diretório existente, então você deve verificar o caminho de destino antes de executar.
Diferença entre copiar e mover
Os formatos básicos dos dois comandos são cp source destination e mv source destination. Copiar deixa uma cópia separada do original, mas mover ou renomear remove o item do caminho original após o sucesso. Os exemplos a seguir são baseados no cp e mv do GNU coreutils.
Arquivos existentes podem ser sobrescritos com o mesmo nome, portanto, verifique o caminho e o conteúdo de destino e prepare os backups necessários antes de lidar com dados importantes. A prática abaixo é realizada em um diretório vazio recém-criado.
Preparando arquivos de prática
O seguinte é um exemplo quando o diretório cp-mv-practice ainda não existe no local atual. Se um diretório com o mesmo nome já existir, pratique em um local vazio diferente. Se o primeiro comando falhar, não prossiga com os comandos subsequentes.
mkdir cp-mv-practice
cd cp-mv-practice
printf 'Hello Linux\n' > note.txt
mkdir target
ls
O arquivo note.txt e um diretório vazio target são exibidos. Os exemplos subsequentes são executados em ordem neste diretório. > de printf sobrescreverá o conteúdo se um arquivo com o mesmo nome existir, portanto, use-o em um local sem dados reais.
Copiando Arquivos
O seguinte comando copia note.txt para copy.txt no diretório atual. Se for bem-sucedido, tanto o original quanto a cópia existirão.
cp note.txt copy.txt
ls
cat copy.txt
cat mostra o conteúdo da cópia, Hello Linux. O seguinte comando copia-o para o diretório existente target com o nome original.
cp note.txt target/
ls target
Se o nome de destino especificado não for um diretório existente, um arquivo com esse nome pode ser criado ou um arquivo existente pode ser sobrescrito. Portanto, se target for um diretório, cp note.txt target copiará o arquivo para dentro dele, mas se ele não existir, um arquivo chamado target será criado. Para copiá-lo com um nome diferente dentro de um diretório, especifique o caminho completo de destino como mostrado em cp note.txt target/other.txt.
Copiando Diretórios
Use a opção recursiva -r ao copiar um diretório e seu conteúdo. O seguinte comando copia o previamente criado target para target-copy, que ainda não existe.
cp -r target target-copy
ls target-copy
Como resultado, target-copy/note.txt é criado e o target/note.txt original permanece. Por outro lado, se o diretório de destino já existir, o diretório original geralmente é colocado dentro dele. Por exemplo, executar cp -r target target-copy novamente pode criar target-copy/target. Verifique o destino com ls antes de executar.
O GNU cp -a tenta preservar atributos como links, permissões e timestamps tanto quanto possível ao realizar cópias recursivas. Nem todos os atributos são garantidamente preservados dependendo das permissões ou do suporte do sistema de arquivos de destino. O manuseio de links simbólicos também varia dependendo das opções, portanto, verifique os dados importantes após a cópia. Para mais detalhes, consulte o manual do cp do GNU.
Movendo e Renomeando Arquivos
O comando a seguir renomeia o copy.txt criado anteriormente para renamed.txt. Se for bem-sucedido, copy.txt desaparece e renamed.txt é exibido.
mv copy.txt renamed.txt
ls
Em seguida, mova o arquivo para um diretório existente. renamed.txt não existe mais em seu local original, e target/renamed.txt é criado.
mv renamed.txt target/
ls target
Ao mover ou renomear um diretório, use mv, e o -r de cp não é necessário. Se o diretório de destino já existir, ele se moverá para dentro dele, e se o destino não existir, ele se moverá com o nome especificado. Se houver conflito com um diretório existente que não esteja vazio, pode falhar, então não suponha que ele se mescle como o copy.
Entre diferentes sistemas de arquivos, o GNU mv pode lidar com isso excluindo o original após a cópia. Grandes volumes de dados podem levar tempo, e se falhar no meio do processo, apenas parte deles pode ser movida, então verifique os resultados em ambos os lados. Você pode consultar as condições detalhadas no manual GNU mv.
Verificações de sobrescrita e erro de caminho
Para receber confirmação antes de sobrescrever um arquivo existente, use -i. A seguir está um cenário prático onde um arquivo com o mesmo nome já existe. Quando as instruções aparecerem, leia-as e aprove apenas se você realmente tiver a intenção de sobrescrever.
cp -i note.txt target/note.txt
mv -i também pergunta antes de substituir um arquivo de destino existente. A confirmação interativa não substitui o tratamento de conflitos em scripts automatizados, então, em scripts, verifique separadamente o comportamento pretendido e o status de saída. O comportamento padrão pode diferir em ambientes onde comandos são definidos como alias.
- Quando há espaços no caminho: Coloque cada caminho entre aspas, como em
cp "my file.txt" "target/my file.txt". - Quando um arquivo ou diretório não pode ser encontrado: Verifique a localização atual, a ortografia e a diferença entre maiúsculas e minúsculas usando
pwdels. - Quando ocorrer um erro de permissão: Verifique se você tem permissão de leitura para a origem e permissão de escrita para o destino, e também verifique as permissões necessárias no diretório de origem ao mover. Se você não tiver permissões, solicite-as ao administrador.
Após verificar os resultados práticos, se necessário, você pode remover o diretório cp-mv-practice usando uma ferramenta de gerenciamento de arquivos. Existem também ferramentas como o Midnight Commander que permitem copiar e mover arquivos enquanto visualizam a lista de arquivos, mas se estão instaladas no servidor e as permissões de uso dependem do ambiente.




