11

Я пытаюсь скопировать дерево каталогов с рекурсивным сохранением жестких ссылок в файл. Используя gnu cp, это будет работать с флагом -l. Затем cp воссоздает структуру каталогов, но не нужно копировать содержимое каждого файла.

Это предварительное резервное копирование, сначала я хочу сделать дешевую (жестко связанную) копию предыдущей резервной копии, а затем выполнить rsync исходного каталога над этой копией. Грубо говоря:

 cp -r -l yesterdays_backup todays_backup
 rsync -a source_dir todays_backup

К сожалению, cp OSX не поддерживает флаг -l, насколько я могу судить, cpio не поддерживает рекурсивное копирование. Другой альтернативой является pax, но это приводит к копированию всей структуры каталогов:

 pax -rw backups/yesterdays_backup backups/todays_backup

трансформирует:

 yesterdays_backup
 |
  \source_dir (...)

чтобы:

 todays_backup
 |
  \backups
          \yesterdays_backup
                            \source_dir(...)

Должен быть простой / очевидный способ сделать это, но я в настоящее время в тупике ... Есть ли альтернативы cpio и pax? Я хотел бы избежать установки GNU CP.

Я знаю о Timemachine, но он не будет правильно создавать резервные копии зашифрованных каталогов.

5 ответов5

15

Установить cp из MacPorts достаточно просто, однако, если вы не хотите или хотите создать переносимый скрипт, у вас есть три варианта:

Rsync

rsync --archive --link-dest=../yesterdays_backup backups/yesterdays_backup\
   backups/todays_backup

CPIO

mkdir backups/todays_backup
cd backups/yesterdays_backup
find . -print | cpio -p -al ../todays_backup

чел

mkdir backups/todays_backup
cd backups/yesterdays_backup
pax -rwl . ../todays_backup
7

Пакет coreutils легко установить из MacPorts, который содержит команду GNU cp переименованную в gcp .

Но, что еще лучше, более новые версии rsync, включая, по крайней мере, версию в OS X 10.5, поддерживают опцию --link-dest, которая должна устранить необходимость в начальном cp -al. Смотрите здесь. Рекомендуется также использовать опцию -E для копирования расширенных атрибутов, списков ACL и т.д.

1

Хотя cpio не поддерживает прямое рекурсивное копирование, вы можете передать точный список файлов, которые вы хотите скопировать, в свой стандартный ввод и добиться эффекта рекурсивного копирования с помощью команды find переданной в cpio . Это прямо аналогично использованию GNU tar с опциями -T - (что означает чтение списка файлов для резервного копирования из стандартного ввода).

0

+1 за ответ Паулса. То же самое можно сделать, но только если оно используется вместе с find - оно сохраняет жесткие ссылки, но только внутри каталогов.

0

Я верю, что то, что вы хотите, также может быть достигнуто с тем ditto yesterdays_backup todays_backup . По умолчанию ditto делает рекурсивное копирование, которое сохраняет жесткие ссылки, ACL и расширенные атрибуты.

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