Yanıtlar:
Bunu yeni buldu:
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 ...
Başka bir yaklaşım find ve mkdir ile :
find SOURCE -type d -exec mkdir TARGET/{} \;
TARGET'in zaten var olduğundan emin olun veya mkdir'in -p seçeneğini kullanın.
Benzer şekilde, (GNU) katranı kullanarak:
find some/dir -type d -print |
tar --no-recursion -T- -c -p -f- |
(cd another/dir && tar -x -p -f-)
Yeni satır karakterleri içeren dosya adlarınız yoksa (bu mümkün, ancak olası değildir) gerçekten -print0
find komut satırında veya -0
rsync komut satırında olması gerekmez. Tar (ve rsync ve cpio) dosya adlarını satır satır okur; NULL sonlandırıcı kullanmak çoğunlukla xargs
, boşlukla ayrılmış dosya adlarını okuyan (ve bu nedenle adlarında boşluk olmayan dosyaları / dizinleri işlemeyen) yararlıdır -0
.
(cd /home/user/source/; find -type d -print0) | xargs -0 mkdir -p
cp -al
Sabit bağlantıları olan tüm dosyaları kopyalar. Aynı yapı, aynı izinler. (not: sabit bağlantılar, böylece depolama kaybı olmaz.)
ls -d * / @source: bul. -tipi d -print0> dirs.txt @hedef: xargs -0 mkdir -p
Bu, her iki komutun da boşluk yerine ayırıcı olarak null kullanmasına neden olur. -Tip d ve -print0 sırasının önemli olduğunu unutmayın!
@source
ve @destination
okuyucunun endikasyonlarıdır, ancak buna rağmen bu işe yaramaz.
rsync -a --include='*/' --exclude='*' ${source} ${destination}
.