Я пытаюсь скопировать дерево каталогов с рекурсивным сохранением жестких ссылок в файл. Используя 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, но он не будет должным образом создавать резервные копии зашифрованных каталогов.
Ответы:
Установить cp из MacPorts достаточно просто, однако, если вы не хотите или хотите создать переносимый скрипт, у вас есть три варианта:
Rsync
CPIO
чел
источник
coreutils
Пакет легко установить из MacPorts, который содержит команду GNU,cp
переименованную вgcp
.Но, что еще лучше, более новые версии rsync, включая, по крайней мере, версию в OS X 10.5, поддерживают опцию --link-dest, которая должна устранить необходимость в начальном cp -al. Смотрите здесь . Рекомендуется также использовать опцию -E для копирования расширенных атрибутов, списков ACL и т. Д.
источник
Хотя
cpio
рекурсивное копирование напрямую не поддерживается, вы можете подать точный список файлов, которые вы хотите скопировать, в свой стандартный ввод и добиться эффекта рекурсивного копирования с помощьюfind
конвейераcpio
. Это прямо аналогично использованию GNUtar
с опциями-T -
(что означает чтение списка файлов для резервного копирования из стандартного ввода).источник
Я верю, что то, что вы хотите, также может быть достигнуто с помощью
ditto yesterdays_backup todays_backup
. По умолчаниюditto
выполняется рекурсивное копирование с сохранением жестких ссылок, списков ACL и расширенных атрибутов.источник
+1 за ответ Паулса. То же самое можно сделать, но только если оно используется вместе с find - оно сохраняет жесткие ссылки, но только внутри каталогов.
источник