Comando cp do Linux: meus sinalizadores e argumentos mais usados

Links de salto

O comando cp no Linux tem algumas opções interessantes que ampliam seu uso. A maioria dos usuários faz apenas cópias simples e nunca se preocupa em explorar os sinalizadores que vêm com elas. Depois de experimentar alguns, percebi que existem alguns sinalizadores que continuo usando para uma experiência melhor.

-r ou -R: cópia recursiva

Você pode usar o comando cp para copiar arquivos e diretórios. Por padrão, funciona apenas em arquivos. Se você tentar usá-lo com diretórios, receberá um erro que ignora a cópia do diretório.

cp dirA/ dirB/

É aqui que o sinalizador -r entra em ação. Usando o sinalizador -r, você também pode copiar diretórios e arquivos dentro deles.

cp -r dirA/ dirB/

Aqui, estamos copiando todo o diretório “dirA/” para outro diretório chamado “dirB/”. Você notará que o próprio diretório “dirA/” também foi copiado. Se você não quiser isso e quiser apenas copiar o conteúdo dentro do diretório, será necessário adicionar um ponto (.) após a barra, assim:

cp -r dirA/. dirB/

Se você deseja apenas criar uma cópia no mesmo diretório, você pode, em vez disso, passar um novo nome como argumento.

cp -r dirA/ dir-copy # copying the directory and renaming it

-u: Copiar somente quando a fonte for mais recente

Um dos sinalizadores mais subestimados para o comando cp é -u. Esta opção diz ao cp para copiar um arquivo apenas se o arquivo de origem for mais recente que o destino ou se o destino ainda não existir.

Imagine que você tem um diretório cheio de arquivos de projeto dos quais está fazendo backup em outra pasta. Executar sempre uma cópia recursiva normal substituirá todos os arquivos, mesmo aqueles que não foram alterados. Isso é desperdício de E/S e, dependendo do tamanho do projeto, pode retardar consideravelmente as coisas.

Com -u, você pode executar o mesmo comando de cópia repetidamente e apenas os arquivos atualizados serão transferidos. Digamos que você tenha uma pasta “reports/” que está sincronizando com “backup/”:

cp -ru reports/ backup/

Como pode ser visto na imagem acima, fiz um pequeno experimento que você também pode acompanhar. A primeira execução copiará tudo. A segunda execução copiará apenas os arquivos que você tocou ou criou desde o último backup. Se nada mudou, o comando terminará quase instantaneamente.

-i: Modo Interativo

Se você é esquecido como eu, provavelmente executou o comando cp sem pensar, apertou Enter e de repente percebeu que acabou de sobrescrever um arquivo que realmente não queria perder. Por padrão, o cp não pedirá confirmação. Ele apenas substituirá o arquivo de destino silenciosamente. É aí que o sinalizador -i é útil. Diz ao cp para perguntar antes de sobrescrever um arquivo. Se já existir um arquivo de destino, o cp fará uma pergunta simples como:

cp: overwrite 'file.txt'?

Neste ponto, você pode digitar ‘y’ para substituí-lo ou ‘n’ para ignorá-lo. Aqui está um exemplo:

cp -i report1.txt reports/
# cp: overwrite 'reports/report1.txt'? n
cp -i report1.txt reports/
# cp: overwrite 'reports/report1.txt'? y

Se “reports/report1.txt” já existir, você será questionado antes de substituí-lo. Sem -i, o arquivo seria substituído sem aviso prévio. Isso é particularmente útil ao copiar para locais como “/etc/” ou “/var/”, onde uma substituição incorreta pode causar problemas significativos. Caso você queira copiar vários arquivos e apenas alguns já existam no destino, -i permite decidir caso a caso.

-v: Modo detalhado

O sinalizador -v é bastante comum para comandos do Linux. Ele ativa o modo detalhado, que é útil para ver o que acontece em segundo plano quando você executa um comando. Especificamente para o comando cp, o sinalizador -v mostra exatamente o que está copiando. Com -v, todo arquivo copiado é impresso no terminal no formato:

'source' -> 'destination'

Isso deixa claro o que está acontecendo nos bastidores. Vejamos um exemplo:

cp -v report1.txt backup/

Para vários arquivos, você pode usar um curinga:

cp -v *.txt backup/

Agora você tem a confirmação de que cada arquivo realmente foi para onde você esperava. Quando você copia arquivos em lotes, o sinalizador detalhado fornece um log de progresso em execução. Também é útil detectar pequenos erros no caso de falha na cópia.

-p: Preservar atributos

Por padrão, o comando cp se concentra em levar o conteúdo dos seus arquivos do ponto A ao ponto B. Mas às vezes os metadados, coisas como carimbos de data e hora, modos de arquivo e propriedade, são tão importantes quanto o próprio arquivo. É disso que se trata o sinalizador -p: preservar atributos.

Quando você adiciona -p, cp preservará esses atributos. Sem -p, os arquivos copiados obtêm carimbos de data/hora atualizados e propriedade padrão no destino. Com -p, eles permanecem “clones” dos originais tanto no conteúdo quanto nos metadados. Vamos ver isso em ação.

cp -p config.cfg backup/

No caso de cópia recursiva:

cp -rp project/ backup/

Isso copiará todo o diretório project/, garantindo que todos os arquivos mantenham seus atributos originais. Se você estiver arquivando arquivos, não deseja que todos mostrem a data de hoje. Preservar os carimbos de data/hora originais ajuda você a saber quando as coisas realmente mudaram.


Existem muitos outros sinalizadores e argumentos para o comando cp. Você pode explorá-los na página de manual oficial. Conhecer essas opções de comando torna a navegação e o gerenciamento de arquivos do Linux muito mais fácil.

Este artigo foi útil?
Gostei0Não Gostei0

Related posts

Não atualize seu PC Windows criptografado a menos que você saiba sua senha do BitLocker

A T-Mobile disponibiliza mensagens de texto de emergência para o 911 gratuitamente e as leva para AT&T e Verizon

Por favor, pare de usar estes 7 comandos obsoletos do Linux