Я пытаюсь скопировать дерево каталогов, рекурсивно сохраняющее 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, но это правильно не создаст резервную копию зашифрованных каталогов инкрементно.
Легко установить coreutils
пакет от MacPorts, который содержит GNU cp
команда, переименованная к gcp
.
Но еще лучше, более новые версии rsync, включая тот в OS X 10.5, по крайней мере, поддерживают - опция ссылки-dest, которая должна избавить от необходимости начальное CP - al. Посмотрите здесь. Это - хорошая практика для использования-E опции также для копирования расширенных атрибутов, ACLs, и т.д.
Хотя cpio
не поддерживает рекурсивное копирование непосредственно, можно подать точный список файлов, которые Вы хотите скопировать в его стандартный вход и достигнуть эффекта рекурсивного использования копии find
переданный по каналу в cpio
. Это непосредственно походит на использование GNU tar
с опциями -T -
(что означает, читает список файлов для резервного копирования от стандартного входа).
Я верю тому, что Вы хотите, может также быть достигнут с ditto yesterdays_backup todays_backup
. По умолчанию, ditto
делает рекурсивную копию, которая сохраняет жесткие ссылки, ACLs и расширенные атрибуты.
Достаточно легко установить 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
+1 для ответа Pauls. так же была бы опция, но только если используемый в сочетании с находкой - она действительно сохраняет жесткие ссылки, но только в каталогах.