CP-r-l в MacOS (рекурсивная копия, сохраняющая жесткие ссылки)

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

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

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

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

 pax -rw backups/yesterdays_backup backups/todays_backup

преобразовывает:

 yesterdays_backup
 |
  \source_dir (...)

кому:

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

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

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

12
задан 30.08.2009, 21:25

5 ответов

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

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

7
ответ дан 07.12.2019, 11:50

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

1
ответ дан 07.12.2019, 11:50

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

1
ответ дан 07.12.2019, 11:50

Достаточно легко установить 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
16
ответ дан 07.12.2019, 11:50

+1 для ответа Pauls. так же была бы опция, но только если используемый в сочетании с находкой - она действительно сохраняет жесткие ссылки, но только в каталогах.

0
ответ дан 07.12.2019, 11:50

Теги

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