Копировать файлы из одного каталога в другой, игнорируя файлы, в которых файл назначения был изменен за последний час?

Попытка обнаружить команду для копирования файлов, если файл назначения (не исходный) не был изменен в течение последнего часа.

    Я не знаю ни одной команды, которая бы точно соответствовала вашим требованиям. Примерно так должно работать (удалите --dry-run если вы уверены, что довольны результатом; замените --verbose на --quiet если хотите, чтобы он работал тише):

     src=/path/to/source dst=/path/to/target comm -z -23 \ <(find "$src" -type f -printf '%P\0' | sort -z) \ <(find "$dst" -type f -mmin -60 -printf '%P\0' | sort -z) | rsync --dry-run --verbose --archive --from0 --files-from - "$src" "$dst" 

    Предполагается, что сравнительно недавние утилиты понимают, как обрабатывать строки, оканчивающиеся NUL. При необходимости и при условии, что вы можете гарантировать, что никакие имена файлов не содержат символов новой строки, вы можете удалить три флага -z и rsync --from0 и заменить \0 в командах find на \n .

    Если все ваши копии находятся в существующих файлах, вы можете посмотреть на это с другой стороны: перезаписать локальные файлы, если они старше одного часа. Итак, с каталогом назначения в качестве рабочего каталога:

     find . -mindepth 1 -maxdepth 1 -type f -mmin +60 -exec cp /source/directory/{} . \; 

    где:

    • find . -mindepth 1 -maxdepth 1 -type f -mmin +60 find . -mindepth 1 -maxdepth 1 -type f -mmin +60 находит локальные файлы, которые старше часа
    • -exec cp /source/directory/{} . \; перезаписывает их своим тезкой из /source/directory