Não conheço nenhum comando que corresponda exatamente à sua necessidade. Algo como isso deve funcionar (remova o --dry-run
quando tiver certeza de que está satisfeito com o resultado; substitua o --verbose
por --quiet
se desejar que ele seja executado de forma mais silenciosa):
src=/path/to/source
dst=/path/to/target
comm -z -23 \
<(find "$src" -type f -printf '%Psrc=/path/to/source
dst=/path/to/target
comm -z -23 \
<(find "$src" -type f -printf '%P%pre%' | sort -z) \
<(find "$dst" -type f -mmin -60 -printf '%P%pre%' | sort -z) |
rsync --dry-run --verbose --archive --from0 --files-from - "$src" "$dst"
' | sort -z) \
<(find "$dst" -type f -mmin -60 -printf '%P%pre%' | sort -z) |
rsync --dry-run --verbose --archive --from0 --files-from - "$src" "$dst"
Ele assume utilitários relativamente recentes que entendem como lidar com linhas terminadas em NUL. Se necessário, e desde que você possa garantir que nenhum nome de arquivo contenha novas linhas, remova os três -z
flags e rsync
'co_de% e substitua o --from0
nos comandos
por find
\n
.