Saya ingin memindahkan beberapa subset file dari dirA ke dirB (misalkan file dengan "bla" dalam nama file), tetapi saya ingin semua direktori yang disarangkan sama di lokasi baru. Bagaimana saya bisa melakukan itu?
Saya ingin memindahkan beberapa subset file dari dirA ke dirB (misalkan file dengan "bla" dalam nama file), tetapi saya ingin semua direktori yang disarangkan sama di lokasi baru. Bagaimana saya bisa melakukan itu?
Jawaban:
Keajaiban rsyncaturan filter:
$ rsync -av --filter="+ */" --filter="-! *blah*" /source /dest
Konsultasikan rsynchalaman manual untuk perincian tentang aturan filter, tapi ini versi kental untuk kebutuhan khusus ini.
--filter="+ */" berarti "termasuk semua yang merupakan direktori"
--filter="-! *blah* berarti "kecualikan semua yang TIDAK termasuk bla dalam nama file"
Jika Anda perlu menyalin file-file ini, cp akan melakukannya:
cd dirA
find . -iname "*blah*" | xargs -If cp --parents f dirB
Opsi --parentsmempertahankan subdir - ini menciptakan jalur direktori lengkap untuk tujuan.
Ini bekerja untuk saya:
rsync -ave 'ssh -p 22' --filter="+ */" --exclude="*_blah.blah" uid@555.55.555.55:/source/directory/ /destination/directory/
The -emendefinisikan beralih rsyncmentransfer protokol dengan pelabuhan sebagai -p 22. Juga, /garis miring trailing penting untuk membuat program tahu itu berurusan dengan direktori.
Terima kasih @pdo atas waktu ekstra di hari kerja saya!