Cela n'a pas besoin d'être fait par rsync
, mais ce serait bien de ne pas avoir à écrire de script pour le faire, et rsync
c'est très proche de ce que je veux.
rsync -a
(ou -l
) peut conserver les liens symboliques, et -L
déréférencer les liens symboliques et les copier comme s'il s'agissait d'un fichier / répertoire normal. Cependant, est-il possible de conserver le lien symbolique et de copier également les fichiers / répertoires vers lesquels les liens pointent?
Voici un exemple. Disons que nous avons cette hiérarchie de dossiers:
dirA/link_to_file -> ../dirB/file
dirA/link_to_dir -> ../dirC
dirB/file
dirB/not_this_file
dirC/file
dirC/file2
dirD/others
et quand je le fais rsync -aR dirA dest
(ou autre chose), je voudrais que ceux-ci apparaissent exactement dans dest
:
dirA/link_to_file -> ../dirB/file
dirA/link_to_dir -> ../dirC
dirB/file
dirC/file
dirC/file2
Est-ce possible avec rsync
? Je vous remercie.
Supposons que les liens symboliques ayant un chemin absolu ou pointant vers l'extérieur du répertoire source puissent être ignorés.
dirA/link
est un lien symbolique vers../dirB/file
, alors cela doit être traité comme une copiedirB/file
versdest/dirB/file
etdirA/link
versdest/dirA/link
. Et sidirA/link
est un lien vers../../another_file
? Que se passe-t-il, en général, sidirA/link
pointe vers un répertoire plus haut dans l'arborescence des répertoires?a -> b
,b -> c/foo
,c -> d/e
: une demande de copiea
doit également copierb
,c
,c/foo
,d
,d/e
etd/e/foo
).Réponses:
Si vous connaissez le nom du lien symbolique et souhaitez transférer le lien et la cible, vous pouvez:
Le premier
rsync
transfère juste lesymlink
. La deuxième commande trouve le vrai nom de répertoire et la secondersync
transfère le contenu du répertoire.la source
Cela serait possible si et seulement si vous étiez tous dans 'mydir' et que vous deviez synchroniser 'mydir' d'un endroit à un autre. Rsync n'est pas capable de copier en dehors du chemin que vous lui donnez (à l'exception des liens suivants). par exemple
la source