Папки слияния и файлы замены с помощью CLI

Сброс PATH переменная сделает это:

export PATH=$PATH
9
30.08.2013, 04:59
2 ответа

Можно использовать rsync сделать это:

$ rsync -abviuzP src/ dest/
  • -a режим архивирования; равняется-rlptgoD (никакой-H,-A,-X)
  • -i включает перечисленный формат, который показывает больше информации, чем формат по умолчанию
  • -b делает rsync файлы резервных копий, которые существуют в обеих папках, добавляя ~ в старый файл. Можно управлять этим суффиксом с - снабжают суффиксом .suf
  • -u делает файлы пропуска передачи rsync, которые являются более новыми в dest, чем в src
  • -z включает сжатие, которое полезно при передаче легко сжимаемых файлов по медленным каналам
  • -P включает - неравнодушный и - прогресс
    • --partial заставляет rsync сохранить частично переданные файлы, если передача прервана
    • --progress показывает индикатор выполнения для каждой передачи, полезной, если Вы передаете большие файлы

Я отбросил бы несколько из этих переключателей, но это должно было только запустить Вас. Я, вероятно, использовал бы что-то вроде этого:

$ rsync -abuP src/ dest/

После того как это смотрит хорошо, можно выполнить эту команду для удаления файлов резервных копий:

$ find dest/ -name "*.~" -delete

Пример

Давайте притворимся, что у нас есть следующие демонстрационные данные.

исходные данные

Мы будем использовать следующие команды для производства некоторых поддельных данных.

$ seq 10 | xargs -I{} -- mkdir dest/dir{}
$ for i in $(seq 5); do echo "$i" > dest/dir$i/file$i;done

Поддельные данные смотрят следующим образом:

$ tree -DsifvF --noreport dest/
dest
[       4096 Aug 29 22:21]  dest/dir1/
[          2 Aug 29 22:21]  dest/dir1/file1
[       4096 Aug 29 22:21]  dest/dir2/
[          2 Aug 29 22:21]  dest/dir2/file2
[       4096 Aug 29 22:21]  dest/dir3/
[          2 Aug 29 22:21]  dest/dir3/file3
[       4096 Aug 29 22:21]  dest/dir4/
[          2 Aug 29 22:21]  dest/dir4/file4
[       4096 Aug 29 22:21]  dest/dir5/
[          2 Aug 29 22:21]  dest/dir5/file5

новые данные

Теперь мы будем копировать исходные данные (dest/* -> src/) и добавление нескольких более новых файлов к соединению. Это моделирует "новый выпуск.

$ cp -pr dest/* src/
$ mkdir src/dir11
$ for i in 1 3 5 11; do echo "$i$i" > src/dir$i/file$i;done

Поддельные данные смотрят следующим образом:

$ tree -DsifvF --noreport src/
src
[       4096 Aug 29 22:21]  src/dir1/
[          3 Aug 29 23:00]  src/dir1/file1
[       4096 Aug 29 22:21]  src/dir2/
[          2 Aug 29 22:21]  src/dir2/file2
[       4096 Aug 29 22:21]  src/dir3/
[          3 Aug 29 23:00]  src/dir3/file3
[       4096 Aug 29 22:21]  src/dir4/
[          2 Aug 29 22:21]  src/dir4/file4
[       4096 Aug 29 22:21]  src/dir5/
[          3 Aug 29 23:00]  src/dir5/file5
[       4096 Aug 29 23:00]  src/dir11/
[          5 Aug 29 23:00]  src/dir11/file11

объедините src/в dest/

Это подражает этому, мы просто устанавливаем наше новое дерево программного обеспечения в src/ и хочу объединиться в наш существующий ранее каталог, dest/.

$ rsync -abuP src/ dest/
sending incremental file list
dir1/file1
           3 100%    0.00kB/s    0:00:00 (xfer#1, to-check=5/13)
dir11/
dir11/file11
           5 100%    4.88kB/s    0:00:00 (xfer#2, to-check=4/13)
dir3/file3
           3 100%    2.93kB/s    0:00:00 (xfer#3, to-check=2/13)
dir5/file5
           3 100%    2.93kB/s    0:00:00 (xfer#4, to-check=0/13)

sent 416 bytes  received 97 bytes  1026.00 bytes/sec
total size is 18  speedup is 0.04

Поскольку Вы видите, что следующие файлы были обновлены, file1, file3, file5, и недавно добавленный dir11 + file11.

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

$ find dest/ | grep "~"
dest/dir3/file3~
dest/dir1/file1~
dest/dir5/file5~
10
27.01.2020, 20:06
  • 1
    Прояснять мысль выше: После того как это смотрит хорошо, можно выполнить эту команду для удаления файлов резервных копий:> $ находят dest/-имя "запускается, точка ~" - удаляют, Это, казалось, не работало на меня, тогда как:> $ находят dest/-имя "запускается, точечная звезда ~" - удаляют, сделал. Не уверенный, если это - опечатка или что-то не настроенное исправляет мой конец! –   03.11.2014, 14:22

Можно использовать CP-r name_of_the_folder /* name_of_the_destination_folder, где звездочка (*) обозначает все файлы и-r для рекурсивной копии.

Можно использовать также-i опцию, которая спросит Вас, если Вы захотите перезаписать содержание.

2
27.01.2020, 20:06

Теги

Похожие вопросы