19

У меня есть папки old и new .

Я хочу заменить все содержимое old/* на new/* . В этих папках может быть много подкаталогов.

Но может быть несколько файлов, которые не находятся в new/* но находятся в old/* , поэтому я хочу, чтобы они остались такими, как есть.

Как я могу сделать это из оболочки Linux?

2 ответа2

21

Используйте rsync . Он будет синхронизировать каталоги в одном направлении. Итак, если вы хотите обновить свою old папку со всем от new но сохранить то , что там, просто использовать:

rsync -avh --dry-run /path/to/new/ /path/to/old/

Это, во-первых, просто выведет список файлов, которые будут переданы. В этом случае: все найденное в new будет скопировано в old , если оно уже там. Все в old остается как есть.

Если вам это нравится , удалите аргумент --dry-run чтобы передать их по-настоящему.

Флаги -avh только включают режим архива (который сохранит временные метки и т.д.), Многословность и удобочитаемый размер файла. Ничто не будет удалено из пункта назначения, если вы не укажете флаг --delete . Обратитесь к man rsync за дополнительной информацией.

16

rsync, вероятно, будет лучшим вариантом здесь. Это так же просто, как rsync -a subdir/./. проверьте этот ответ unix.stackexchage для лучших решений

используйте -f с командой cp

cp -fR /source/files /dest

подавить cp для перезаписи "подсказка ..

Чтобы переопределить псевдоним cp, вы можете просто заключить его в кавычки:

 'cp' -rf ./source/* /destination/

для получения дополнительной информации перейдите по этим ссылкам:

http://www.wallpaperama.com/forums/cp-command-problems-forcing-overwrite-using-cp-command-t5685.html

http://bytes.com/topic/unix/answers/865372-force-cp-overwrite-existing-directory

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .