From what I get
cp
seems to interpret my intended destination as the source.
Sim, é. Isso porque a sintaxe geral do Linux / Unix é algo assim:
[some command] [some command options] [source item] [destination item]
Então olhe para o seu comando:
find absolute-path -name "*" -amin -120 -exec cp -f absolute-destination {} \;
Esse cp -f absolute-destination {}
é retroativo, pois o {}
representa o arquivo de origem, conforme encontrado pelo comando find
, e o "destino absoluto" é exatamente o que é; um destino. Então, essa parte do comando deve ser reescrita como cp -f {} absolute-destination
.
Além disso:
- O
-name "*"
é redundante e supérfluo se você estiver pesquisando todos os arquivos com base no tempo; o que significa que você pode simplesmente abandonar isso. - Além disso, o uso de
amin
é um pouco confuso, pois-amin -120
significa que “o arquivo foi acessado nos últimos 120 minutos.” Se você quiser atuar no tempo de criação dos arquivos, que deve ser alterado paracmin
—aka: changedn
minutes ago — instead; mais detalhes na página man dofind
do Linux.
Então o comando final seria:
find absolute-path -cmin -120 -exec cp -f {} absolute-destination \;
Mas antes de executar o comando cp
, você deve sempre fazer um "dry run" usando echo
para ver exatamente o que está acontecendo assim:
find absolute-path -cmin -120 -exec echo {} \;
Lembre-se, fazer um teste de “execução a seco” de um comando como este antes de executar o comando real / final poupará dores de cabeça a longo prazo. Especialmente se você planeja executar o comando como root
.
Você nunca sabe se você pode ter cometido um erro simples e inadvertido em sua lógica de comando que pode estragar de maneiras inesperadas. E apressar um comando estruturado erroneamente para “produção” sem testes pode economizar alguns minutos no início, mas pode resultar em horas - e, em alguns casos, dias - de trabalho de limpeza. Sempre é seguro quando se trabalha na linha de comando.