Я хотел бы скопировать набор файлов из каталога A в каталог B с оговоркой, что если файл в каталоге A идентичен файлу в каталоге B, этот файл не должен копироваться (и, следовательно, время его модификации не должно быть обновлено). Есть ли способ сделать это с помощью существующих инструментов, без написания собственного сценария?
Чтобы немного рассказать о моем сценарии использования: я автоматически .c
генерирую группу файлов во временном каталоге (методом, который должен генерировать все из них безоговорочно), и когда я их заново генерирую, я хотел бы только скопировать те, которые превратились в фактический исходный каталог, оставляя неизменными (с их старым временем создания), чтобы make
знать, что не нужно их перекомпилировать. (Однако не все сгенерированные файлы являются .c
файлами, поэтому мне нужно делать двоичные сравнения, а не текстовые сравнения.)
(Примечание: это выросло из вопроса, который я задал на https://stackoverflow.com/questions/8981552/speeding-up-file-comparions-with-cmp-on-cygwin/8981762#8981762 , где я пытался чтобы ускорить файл сценария, который я использовал для выполнения этой операции, но мне пришло в голову, что я действительно должен спросить, есть ли лучший способ сделать это, чем написание собственного сценария - тем более, что любой простой способ сделать это в оболочке скрипт будет вызывать что-то вроде cmp
каждой пары файлов, и запуск всех этих процессов занимает слишком много времени.)
rsync -avnc
или длинный путь rsync --archive --verbose --dry-run --checksum
.
diff -qr dirA dirB
чтобы увидеть, какие файлы являются уникальнымиdirA
иdirB
, соответственно.