rsync
akan menjadi pilihan yang buruk karena melakukan banyak pekerjaan latar belakang klien/server yang memperhitungkan sistem lokal maupun jarak jauh.
mv
mungkin adalah pilihan terbaik. Jika memungkinkan, Anda harus mencoba mv directory_old directory_new
bukan mv directory_old/* directory_new/
. Dengan cara ini, Anda memindahkan satu barang, bukan jutaan barang.
find src_image_dir/ -type f -name '*.jpg' -print0 | xargs -0r mv -t dst_image_dir/
- Ini tidak akan melimpahkan ekspansi argumen.
- Anda dapat menentukan ekstensi file, jika Anda mau. (-nama ...)
find -print0
denganxargs -0
memungkinkan Anda menggunakan spasi pada nama.xargs -r
tidak akan menjalankanmv
kecuali ada yang mau dipindahkan. (mv
akan mengeluh jika tidak ada file sumber yang diberikan).- Sintaks
mv -t
memungkinkan Anda untuk menentukan terlebih dahulu tujuan dan kemudian file sumber, yang dibutuhkan olehxargs
. - Memindahkan seluruh direktori tentu saja jauh lebih cepat, karena berlangsung dalam waktu yang konstan terlepas dari jumlah file yang ada di dalamnya, tetapi:
- direktori sumber akan menghilang untuk waktu yang singkat dan mungkin menimbulkan masalah bagi Anda;
- jika proses menggunakan direktori saat ini sebagai direktori keluaran (berbeda dengan selalu merujuk ke jalur lengkap dari lokasi yang tidak bergerak), Anda harus meluncurkannya kembali. (seperti yang Anda lakukan dengan rotasi log ).
Ngomong-ngomong, saya akan bertanya pada diri sendiri apakah saya benar-benar harus memindahkan file dalam jumlah besar sekaligus. Pemrosesan batch dinilai terlalu tinggi. Saya mencoba untuk tidak menumpuk pekerjaan dalam jumlah besar jika saya dapat memproses sesuatu pada saat dihasilkan.
Jika kedua direktori berada pada sistem file yang sama, gunakan mv
pada DIRECTORY dan bukan isi direktori.
Jika berada di dua sistem file yang berbeda, gunakan rsync:
rsync -av /source/directory/ /destination
Perhatikan /
di belakangnya pada sumbernya. Ini berarti akan menyalin ISI direktori dan bukan direktori itu sendiri. Jika Anda meninggalkan /
mati, itu masih akan menyalin file tetapi mereka akan duduk di direktori bernama /destination/directory
. Dengan /, file hanya akan berada di /destination
rsync
akan mempertahankan kepemilikan file jika Anda menjalankannya sebagai root atau jika file tersebut milik Anda. Itu juga akan mempertahankan mtime
dari setiap file individual.