Linux Bash: Movendo/Copiando arquivos/diretórios por carimbo de data/hora

Linux Bash: Movendo/Copiando arquivos/diretórios por carimbo de data/hora

Este é o comando que estou usando:

find absolute-path -name "*" -amin -120 -exec cp -f absolute-destination {} \;

Estou tentando copiar muitos diretórios de um diretório para outro diretório, mas apenas aqueles criados nas últimas 2 horas.

Meu comando não está funcionando e eu realmente não entendo por que, se não for óbvio, não sou um usuário Linux muito experiente. Pelo que recebo, cpparece interpretar o destino pretendido como a fonte.

Até tentei usar xargse isso entendo menos ainda.

Usando Bash no Debian Squeezy e executando o comando no root.

Responder1

Pelo que recebo, cpparece interpretar o destino pretendido como a fonte.

É sim. Isso ocorre porque a sintaxe geral do Linux/Unix é mais ou menos assim:

[some command] [some command options] [source item] [destination item]

Então veja seu comando:

find absolute-path -name "*" -amin -120 -exec cp -f absolute-destination {} \;

Isso cp -f absolute-destination {}é o contrário, pois {}representa o arquivo de origem conforme encontrado pelo findcomando e o “destino absoluto” é exatamente o que é; um destino. Portanto, essa parte do comando deve ser reescrita como cp -f {} absolute-destination.

Adicionalmente:

  • Isso -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 -120significa “o arquivo foiacessadonos últimos 120 minutos.” Se você quiser agir de acordocriaçãohora dos arquivos, que deve ser alterado para cmin—também conhecido como: alterado nminutos atrás—em vez disso; mais detalhes no Linuxfindpágina de manual.

Então o comando final seria:

find absolute-path -cmin -120 -exec cp -f {} absolute-destination \;

Mas antes de executar esse cpcomando você deve sempre fazer um “ensaio” usando echopara ver exatamente o que está acontecendo assim:

find absolute-path -cmin -120 -exec echo {} \;

Lembre-se, fazendo um teste de “simulação” de um comando como esteantesexecutar o comando real/final evitará dores de cabeça no longo prazo. Especialmente se você planeja executar o comando como root.

Você nunca sabe se pode ter cometido um erro simples e inadvertido em sua lógica de comando que pode atrapalhar de maneiras inesperadas. E colocar um comando estruturado incorretamente em “produção” sem testes pode economizar alguns minutos no início, mas depois pode resultar em horas – e em alguns casos, dias – de trabalho de limpeza.Semprejogue pelo seguro ao trabalhar na linha de comando.

informação relacionada