Как заменить все содержимое из одной папки в другую

23

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

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

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

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

user105919
источник

Ответы:

18

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

Ниранджан Сингх
источник
23

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

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

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

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

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

slhck
источник