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 rsync
aturan filter:
$ rsync -av --filter="+ */" --filter="-! *blah*" /source /dest
Konsultasikan rsync
halaman 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 --parents
mempertahankan 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 -e
mendefinisikan beralih rsync
mentransfer 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!