Réponses:
Je viens de trouver ceci:
rsync -a -f"+ */" -f"- *" source/ destination/
http://psung.blogspot.com/2008/05/copying-directory-trees-with-rsync.html
find some/dir -type d -print0 | rsync --files-from=/dev/stdin -0 ...
Une autre approche est avec find et mkdir :
find SOURCE -type d -exec mkdir TARGET/{} \;
Assurez-vous simplement que TARGET existe déjà ou utilisez l'option -p de mkdir.
De même, en utilisant (GNU) tar:
find some/dir -type d -print |
tar --no-recursion -T- -c -p -f- |
(cd another/dir && tar -x -p -f-)
Vous n'avez pas vraiment besoin de la -print0
ligne de commande find ou de la -0
ligne de commande rsync, sauf si vous avez des noms de fichiers contenant des caractères de nouvelle ligne (ce qui est possible mais hautement improbable). Tar (et rsync et cpio) lisent les noms de fichiers ligne par ligne; l'utilisation d'un terminateur NULL est surtout utile avec xargs
, qui lit normalement les noms de fichiers séparés par des espaces (et donc ne gère pas les fichiers / répertoires avec des espaces dans leurs noms sans -0
).
(cd /home/user/source/; find -type d -print0) | xargs -0 mkdir -p
cp -al
Copierait tous les fichiers avec des liens durs. Même structure, mêmes autorisations. (Remarque: liens durs, donc pas de stockage perdu.)
ls -d * / @source: rechercher. -type d -print0> dirs.txt @destination: xargs -0 mkdir -p
Cela entraînera les deux commandes à utiliser des valeurs nulles comme séparateurs au lieu d'espaces blancs. Notez que l'ordre des types -d et -print0 est important!
@source
et @destination
soient des indications pour le lecteur, mais cela ne peut tout de même pas fonctionner.
rsync -a --include='*/' --exclude='*' ${source} ${destination}
.