J'essaie de copier une arborescence de répertoires en préservant récursivement les liens physiques vers le fichier. En utilisant gnu cp, cela fonctionnerait avec le drapeau -l. cp recréerait alors la structure du répertoire, mais n'aurait pas besoin de copier le contenu de chaque fichier.
Ceci est préliminaire à une sauvegarde, je veux d'abord faire une copie bon marché (liée en dur) de la sauvegarde précédente, puis rsync le répertoire source sur cette copie. Grossièrement:
cp -r -l yesterdays_backup todays_backup
rsync -a source_dir todays_backup
Malheureusement, le cp d'OSX ne prend pas en charge l'indicateur -l, pour autant que je sache, cpio ne prend pas en charge la copie récursive. L'autre alternative est pax, mais cela entraîne la copie de la structure complète du répertoire:
pax -rw backups/yesterdays_backup backups/todays_backup
se transforme:
yesterdays_backup
|
\source_dir (...)
à:
todays_backup
|
\backups
\yesterdays_backup
\source_dir(...)
Il devrait y avoir un moyen facile / évident de le faire, mais je suis actuellement perplexe ... Des alternatives à cpio et pax? Je voudrais éviter d'avoir à installer gnu cp.
Je connais Timemachine, mais cela ne sauvegardera pas correctement les répertoires chiffrés de manière incrémentielle.
Réponses:
Il est assez facile d'installer cp à partir de MacPorts, cependant, si vous ne voulez pas ou ne voulez pas créer un script portable, vous avez trois options:
rsync
cpio
pax
la source
Il est facile d'installer le
coreutils
package à partir de MacPorts qui contient lacp
commande GNU renomméegcp
.Mais encore mieux, les versions plus récentes de rsync, y compris celle d'OS X 10.5 au moins, prennent en charge l'option --link-dest, ce qui devrait éliminer le besoin de cp -al initial. Voyez ici . Il est recommandé d'utiliser également l'option -E pour copier les attributs étendus, les listes de contrôle d'accès, etc.
la source
Bien
cpio
qu'il ne prenne pas directement en charge la copie récursive, vous pouvez alimenter la liste exacte des fichiers que vous souhaitez copier dans son entrée standard et obtenir l'effet d'une copie récursive à l'aide defind
piped intocpio
. Ceci est directement analogue à l'utilisation de GNUtar
avec les options-T -
(ce qui signifie lire la liste des fichiers à sauvegarder depuis l'entrée standard).la source
Je crois que ce que vous voulez peut également être réalisé
ditto yesterdays_backup todays_backup
. Par défaut,ditto
effectue une copie récursive qui préserve les liens durs, les listes de contrôle d'accès et les attributs étendus.la source
+1 pour la réponse de Pauls. idem serait une option, mais seulement s'il est utilisé en conjonction avec find - il conserve les liens durs, mais uniquement à l'intérieur des répertoires.
la source