Risposte:
Ho appena trovato questo:
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 ...
Un altro approccio è con find e mkdir :
find SOURCE -type d -exec mkdir TARGET/{} \;
Assicurati solo che TARGET esista già o usa l'opzione -p di mkdir.
Allo stesso modo, usando (GNU) tar:
find some/dir -type d -print |
tar --no-recursion -T- -c -p -f- |
(cd another/dir && tar -x -p -f-)
Non hai davvero bisogno di -print0
riga di comando trova o della -0
riga di comando rsync a meno che tu non abbia nomi di file che contengono caratteri di nuova riga (che è possibile ma altamente improbabile). Tar (e rsync e cpio) leggono i nomi dei file riga per riga; usare un terminatore NULL è per lo più utile xargs
, che normalmente legge nomi di file separati da spazi bianchi (e quindi non gestisce file / directory con spazi nei loro nomi senza -0
).
(cd /home/user/source/; find -type d -print0) | xargs -0 mkdir -p
cp -al
Copierei tutti i file con collegamenti reali. Stessa struttura, stesse autorizzazioni. (nota: collegamenti reali, quindi nessuna memoria persa.)
ls -d * / @source: find. -type d -print0> dirs.txt @destination: xargs -0 mkdir -p
Ciò farà sì che entrambi i comandi utilizzino i valori null come separatori anziché spazi bianchi. Notare che l'ordine di -type de -print0 è importante!
@source
e @destination
siano indicazioni per il lettore, ma anche così questo non può funzionare.
rsync -a --include='*/' --exclude='*' ${source} ${destination}
.