
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, cp
parece interpretar o destino pretendido como a fonte.
Até tentei usar xargs
e isso entendo menos ainda.
Usando Bash no Debian Squeezy e executando o comando no root.
Responder1
Pelo que recebo,
cp
parece 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 find
comando 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 -120
significa “o arquivo foiacessadonos últimos 120 minutos.” Se você quiser agir de acordocriaçãohora dos arquivos, que deve ser alterado paracmin
—também conhecido como: alteradon
minutos atrás—em vez disso; mais detalhes no Linuxfind
página de manual.
Então o comando final seria:
find absolute-path -cmin -120 -exec cp -f {} absolute-destination \;
Mas antes de executar esse cp
comando você deve sempre fazer um “ensaio” usando echo
para 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.