Я хотел бы переместить каталог и все его содержимое поверх другого.
Под этим я подразумеваю, что если у меня есть два каталога, A и B, и я хочу переместить B в A, я хочу, чтобы файлы и каталоги, которые не находятся в A, но находятся в B, просто копировались в A, файлы того же имя в A должно быть обновлено до копий в B, и папки с тем же именем в A должны быть обновлены новым содержимым из B, но в остальном существующее содержимое сохраняется
Есть ли способ сделать это легко в bash?
Между прочим, насколько я понимаю, именно это происходит, когда вы извлекаете tar-архив поверх более старой версии этого архива. Это правда?
Ты на правильном пути с tar
. Эта команда сделает то, что вы хотите:
$ cd /path/to/A
$ tar -cf - * | tar -C /path/to/B -xf -
Я также видел cpio
или rsync
используется для этой цели.
Вот пример запуска с tar
:
/tmp $ tree A B
A
|-- one
| `-- two
| |-- four
| `-- three
`-- uno
`-- hello
B
|-- dos
| |-- hi
| `-- tres
`-- one
`-- two
`-- three
7 directories, 5 files
/tmp $ md5sum A/one/two/three B/one/two/three
764efa883dda1e11db47671c4a3bbd9e A/one/two/three
d41d8cd98f00b204e9800998ecf8427e B/one/two/three
/tmp $ (cd A; tar -cf - * | tar -C ../B -xf -)
/tmp $ tree A B
A
|-- one
| `-- two
| |-- four
| `-- three
`-- uno
`-- hello
B
|-- dos
| |-- hi
| `-- tres
|-- one
| `-- two
| |-- four
| `-- three
`-- uno
`-- hello
8 directories, 7 files
/tmp $ md5sum A/one/two/three B/one/two/three
764efa883dda1e11db47671c4a3bbd9e A/one/two/three
764efa883dda1e11db47671c4a3bbd9e B/one/two/three
/tmp $
Надеюсь, это поможет!
rsync -a -v -n /path/to/a/ /path/to/b/
Если все в порядке, удалите флаг -n, чтобы он действительно работал. Если вы не хотите, чтобы он был таким болтливым, удалите флаг -v.
Изменить: чтобы быть точным, это позволяет b иметь все, что есть у a, плюс сохранить все, что у b было раньше.