Links de salto
O comando CP no Linux tem algumas opções legais que estendem seu uso. A maioria dos usuários só cópia de baunilha e nunca se preocupa em explorar as bandeiras que o acompanham. Depois de experimentar alguns, percebi que existem algumas bandeiras 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, ele 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 a bandeira -r entra em jogo. Ao usar 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 quer isso e deseja apenas copiar o conteúdo dentro do diretório, precisará adicionar um ponto (.) Após a barra, assim:
cp -r dirA/. dirB/
Se você deseja apenas criar uma cópia no mesmo diretório, poderá passar um novo nome como argumento.
cp -r dirA/ dir-copy # copying the directory and renaming it
-u: copie apenas quando a fonte é mais recente
Uma das bandeiras mais subestimadas para o comando CP é -u. Esta opção informa ao CP para copiar apenas um arquivo se o arquivo de origem for mais novo que o destino ou se o destino ainda não existir.
Imagine que você tem um diretório cheio de arquivos de projeto que está fazendo backup de outra pasta. A execução de uma cópia recursiva normal sempre substituirá todos os arquivos, mesmo os que não foram alterados. Isso é desperdiçado E/S e, dependendo do tamanho do projeto, pode diminuir 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 “Relatórios/” que está sincronizando em “Backup/”:
cp -ru reports/ backup/
Como visto na captura de tela acima, fiz um pequeno experimento que você também pode seguir. A primeira corrida 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ê se esquecer como eu, provavelmente executou o comando do CP sem pensar, pressione Enter e de repente percebe que acabou de substituir um arquivo que realmente não queria perder. Por padrão, o CP não solicitará confirmação. Ele apenas substituirá o arquivo de destino em silêncio. É aí que a bandeira -i é útil. Ele diz ao CP para pedir antes de substituir um arquivo. Se já existir um arquivo de destino, o CP solicitará uma pergunta simples como:
cp: overwrite 'file.txt'?
Neste ponto, você pode digitar ‘y’ para substituí -lo ou ‘n’ para pular. 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 “relatórios/relatórios1.txt” já existir, você será solicitado antes de substituí -lo. Sem -i, o arquivo seria substituído sem aviso prévio. Isso é particularmente útil ao copiar em locais como “/etc/” ou “/var/”, onde uma substituição errada pode causar problemas significativos. Caso você queira copiar vários arquivos e apenas alguns já existem no destino, permite que você decida caso a caso.
-v: modo detalhado
O sinalizador -v é bastante comum para comandos Linux. Ele permite o modo detalhado, que é útil ver o que acontece em segundo plano quando você executa um comando. Para o comando CP especificamente, o sinalizador -v mostra o que exatamente está copiando. Com -v, cada arquivo que é copiado é impresso no terminal no formato:
'source' -> 'destination'
Isso deixa claro o que está acontecendo nos bastidores. Vamos ver um exemplo:
cp -v report1.txt backup/
Para vários arquivos, você pode usar um curinga:
cp -v *.txt backup/
Agora você tem uma confirmação de que cada arquivo realmente foi para onde você esperava. Quando você está copiando arquivos em lotes, o sinalizador detalhado fornece um log de progresso em execução. Também é útil pegar esses pequenos erros em caso de cópia fracassada.
-p: preservar atributos
Por padrão, o comando CP se concentra em obter o conteúdo de seus arquivos do ponto A ao ponto B. Mas, às vezes, os metadados, coisas como registro 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, a CP preserva esses atributos. Sem -P, os arquivos copiados obtêm novos registros de data e hora e a propriedade padrão no destino. Com -p, eles permanecem “clones” dos originais em conteúdo e 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 projeto/ diretório, garantindo que todos os arquivos mantenham seus atributos originais. Se você está arquivando arquivos, não deseja que todos mostrem a data de hoje. Preservar os registros de data e hora originais ajuda você a saber quando as coisas realmente mudaram.
Existem muito mais sinalizadores e argumentos para o comando CP. Você pode explorá -los em a manpra oficial. O conhecimento dessas opções de comando facilita muito mais a navegação de arquivos do Linux e o gerenciamento de arquivos do terminal.