Jawaban:
Baru saja menemukan ini:
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 ...
Pendekatan lain adalah dengan find dan mkdir :
find SOURCE -type d -exec mkdir TARGET/{} \;
Pastikan TARGET sudah ada atau gunakan opsi -p dari mkdir.
Demikian pula, menggunakan tar (GNU):
find some/dir -type d -print |
tar --no-recursion -T- -c -p -f- |
(cd another/dir && tar -x -p -f-)
Anda tidak benar-benar memerlukan -print0
baris perintah pada temukan atau -0
pada baris perintah rsync kecuali Anda memiliki nama file yang berisi karakter baris baru (yang mungkin tetapi sangat tidak mungkin). Tar (dan rsync, dan cpio) membaca nama file baris demi baris; menggunakan terminator NULL sebagian besar berguna xargs
, yang biasanya membaca nama file yang dipisahkan dengan spasi putih (dan karenanya tidak menangani file / direktori dengan spasi tanpa nama -0
).
(cd /home/user/source/; find -type d -print0) | xargs -0 mkdir -p
cp -al
Akan menyalin semua file dengan tautan keras. Struktur yang sama, izin yang sama. (catatan: tautan keras, jadi tidak ada penyimpanan yang hilang.)
ls -d * / @source: find. -type d -print0> dirs.txt @destination: xargs -0 mkdir -p
Ini akan menyebabkan kedua perintah menggunakan nulls sebagai pemisah alih-alih spasi putih. Perhatikan bahwa urutan -tipe d dan -print0 penting!
@source
dan @destination
merupakan indikasi bagi pembaca, tetapi meskipun demikian ini tidak berhasil.
rsync -a --include='*/' --exclude='*' ${source} ${destination}
.