Copiando um arquivo apenas quando é mais novo que o destino

36

Como copio um arquivo no Linux somente quando o arquivo que está sendo copiado é mais recente que a versão no destino?

Se o arquivo no destino for mais recente, desejo que a cópia do arquivo não avance.

Eli
fonte

Respostas:

17

Use rsync

rsync --progress -r -u /from/one/* /to/another/directory
gnod
fonte
3
Apenas para completar: -rsignifica operação recursiva em subdiretórios e -umanter os arquivos mais novos no destino (= atualização). --progressmostra informações de progresso durante a operação.
Jörg Gottschlich 01/01
6

Você não está dizendo qual shell está usando, então vou assumir ksh:

if [[ file1 -nt file2 ]]; then cp file1 file2; fi
Kusalananda
fonte
O bash não é mais comum?
Rob
11
@ Rob, sim. Isso funciona também no bash, obviamente. Eu simplesmente não tinha o bash (ou qualquer caixa padrão do Linux) em mãos quando o escrevi.
Kusalananda 29/09
4

yes|cp -ruv /from/* /to/.
sim - responda sim a todas as perguntas.
r - Recursivo
u - atualização
v - Progresso

funciona como xargs .

Não sei explicar academicamente.

Como forçar o cp a substituir sem confirmação

Felippe Silvestre
fonte
11
Isso é meio enigmático. Você pode expandir sua resposta para ser um pouco mais explícita, talvez inclua um exemplo? Obrigado. Da avaliação
fixer1234
sim -> Responda sim a todas as perguntas.
Felippe Silvestre