Копировать структуру каталогов поверх другого
Я хотел бы переместить каталог и все его содержимое поверх другого.
Под этим я подразумеваю, что если у меня есть два каталога, A и B, и я хочу переместить B на A, я хочу, чтобы файлы и каталоги, которые не находятся в A, но находятся в B, просто копировались в A, файлы одного и того же имя в A будет обновлено до копий в B, а папки с тем же именем в A будут обновлены новым содержимым из B, но в противном случае сохранится существующее содержимое
Есть ли способ сделать это легко в Bash?
Между прочим, я понимаю, что это то, что происходит, когда вы извлекаете архив tar поверх старой версии этого архива. Это правда?
3 ответа
rsync -a -v -n /path/to/a/ /path/to/b/
Если все выглядит хорошо, уберите флаг -n, чтобы он действительно выполнял свою работу. Если вы не хотите, чтобы он был таким разговорчивым, уберите флаг -v.
Редактировать: чтобы быть точным, это заставляет b иметь все, что имеет a, плюс сохранять все, что b имел раньше.
Вы на правильном пути с 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 $
Надеюсь, это поможет!