Подтвердить что ты не робот

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

Я хочу сделать конкретную копию в Fedora.

У меня есть две папки:

  • 'webroot': сохранение ВСЕХ веб файлов/изображений и т.д.

  • 'export': папка, содержащая тысячи PHP, CSS, JS-документов, которые экспортируются из моего SVN-репо.

В каталоге экспорта содержатся многие из тех же файлов/папок, что и корневой каталог, однако корень содержит дополнительные, которые не найдены в экспорте.

Я хотел бы объединить все содержимое экспорта с моим веб-сайтом со следующими параметрами:

  • Перезапись файла в webroot, если версия экспорта содержит другой код, чем находится внутри веб-версии (в прямом эфире)
  • Сохранять разрешения/пользователи/группы файла, если они перезаписаны (экспорт версия, заменяющая живую версию) * ПРИМЕЧАНИЕ. Я бы хотел, чтобы разрешения/права на веб-корни поддерживались, но с содержимым экспорта.
  • Не запрашивать/останавливать копию любого рода (то есть не многословный)
  • Рекурсивная копия - очевидно, я хотел бы скопировать все * файлы папок и подпапок, найденных в экспорт

Я провел немного исследований в cp - будет ли это делать работу?:

cp -pruf ./export /path/to/webroot
4b9b3361

Ответ 1

Возможно, но в любой момент, когда соответствующие файлы в export и webroot имеют один и тот же контент, но разные времена модификации, вы завершаете выполнение ненужной операции копирования. Вероятно, вы получите немного более умное поведение от rsync:

rsync -pr ./export /path/to/webroot

Кроме того, rsync может копировать файлы с одного хоста на другой по SSH-соединению, если вам когда-либо понадобится это сделать. Кроме того, у него есть параметры zillion, которые вы можете указать, чтобы настроить его поведение. Подробности см. на странице руководства.

EDIT: в отношении вашего разъяснения о том, что вы имеете в виду, сохраняя разрешения: вы, вероятно, захотите оставить параметр -p.

Ответ 2

  • -u перезаписывает папку существующих файлов, если место назначения старше источника
  • -p сохраняет разрешения и даты
  • -f отключает многословие
  • -r делает копию рекурсивной

Похоже, вы получили все правильные аргументы для cp

Ответ 3

Звучит как задание для cpio (и, следовательно, возможно, GNU tar тоже может это сделать):

cd export
find . -print | cpio -pvdm /path/to/webroot

Если вам нужны владельцы, вы должны сделать это как root, конечно. Опция -p - это "режим передачи", что означает копирование между местоположениями; -v является подробным (но не интерактивным, есть разница); -d означает создание каталогов по мере необходимости; -m означает сохранение времени модификации. По умолчанию без параметра -u cpio не будет перезаписывать файлы в целевой области, которые новее, чем та, которая находится в исходной области.