Respuestas:
Acabo de encontrar esto:
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 ...
Otro enfoque es con find y mkdir :
find SOURCE -type d -exec mkdir TARGET/{} \;
Solo asegúrese de que TARGET ya exista o use la opción -p de mkdir.
Del mismo modo, usando (GNU) tar:
find some/dir -type d -print |
tar --no-recursion -T- -c -p -f- |
(cd another/dir && tar -x -p -f-)
Realmente no necesita el -print0
en la línea de comando find o -0
en la línea de comando rsync a menos que tenga nombres de archivo que contengan caracteres de nueva línea (lo cual es posible pero altamente improbable). Tar (y rsync, y cpio) leen los nombres de archivo línea por línea; el uso de un terminador NULL es principalmente útil con xargs
, que normalmente lee nombres de archivos separados por espacios en blanco (y, por lo tanto, no maneja archivos / directorios con espacios en sus nombres sin ellos -0
).
(cd /home/user/source/; find -type d -print0) | xargs -0 mkdir -p
cp -al
Copiaría todos los archivos con enlaces duros. Misma estructura, mismos permisos. (nota: enlaces duros, por lo que no se pierde almacenamiento).
ls -d * / @source: buscar. -type d -print0> dirs.txt @destination: xargs -0 mkdir -p
Esto hará que ambos comandos usen nulos como separadores en lugar de espacios en blanco. Tenga en cuenta que el orden de -type d y -print0 es importante!
@source
y @destination
son indicaciones para el lector, pero aun así esto no puede funcionar.
rsync -a --include='*/' --exclude='*' ${source} ${destination}
.