Bagaimana saya bisa memindahkan file ke direktori di mana mungkin ada ratusan atau ribuan file dalam direktori, dan Anda mungkin tidak yakin tentang apakah ada dupes di dalamnya ..
. Metode apa yang akan Anda gunakan?
Cara menangani dupes akan bervariasi, kadang-kadang kita akan menimpa, kadang-kadang kita harus lebih aman. IO dapat menjadi penting karena ini adalah server produksi. Tetapi jumlah yang diberikan prompt untuk file non duplikat bukan pilihan. Pelestarian izin, dan stempel waktu, dll, adalah penting. Kami biasanya tidak akan tahu apa datanya.
Oh dan menggunakan mv
tidak diperlukan, rsync
, cp
solusi menyambut.
Catatan: kami menjalankan CentOS 5.5 jadi beri tahu saya jika itu tidak akan berfungsi di sana karena itu fitur yang lebih baru ...
sumber
mv
dan apakah kita peduli tentang pelestarian dalam kasus ... dan apakah kita sudah membuat cadangan. Pertanyaan ini cukup terbuka. Saya hanya mencari pilihan yang baik, dan mungkin komentar tentang apakah itu bisa menggigit Anda dan bagaimana.mv * ../
ataumv -i * ../
?Jawaban:
Saya akan merekomendasikan menggunakan rsync dari induk:
yang akan mencadangkan semua file duplikat yang ada di induk ke file- asli.
sumber
-a
menyiratkan-r
-l
untukcp
)-H
atau--hard-links
untuk rsync untuk mempertahankan tautan keras.--link-dest=DIR
flag untuk mencapai perilaku ini sebagai:rsync -avP --link-dest=/path/to/src /path/to/src/* /path/to/dest/
yang akan menghubungkan ke dst / file yang tidak berubah antara src dan src, dalam hal ini semua file. Biasanya Anda melihat bendera ini digunakan ketika Anda ingin menautkan kembali file cadangan tanpa menyalin data mereka seperti--link-dest=/most/recent/backup
.Ini akan menyalin semua yang ada di direktori saat ini ke direktori di atasnya, mempertahankan semua izin, menggunakan hardlink untuk meminimalkan IO jika memungkinkan, dan pada duplikat itu menciptakan nama file ~
setelah itu
sumber
Dalam contoh ini akan memindahkan file dari '/ parent / old-dir' ke '/ parent':
Dengan aturan rsync, itu akan menggantikan dups dengan file yang lebih baru
old-dir
.sumber
Anda dapat mencoba
yang akan menimpa file dupe di ..
Anda dapat menggunakan mv -u '{}' untuk tidak menimpa jika dupe dalam .. adalah sama atau lebih baru
sumber
..
kemv '{}' +
perintah karena + hanya menambah akhir.-exec mv -t .. -- {} +
. Portable:-exec sh -c 'mv -- "$@"' _ {} +
.mv -i
hanya meminta jika tujuan ada.yes n | mv -i …
memindahkan semua file yang tidak ada di direktori tujuan. Pada FreeBSD dan OSX, Anda dapat mempersingkat ini menjadimv -n …
.Perhatikan bahwa tak satu pun dari ini akan menggabungkan argumen direktori dengan direktori yang ada dengan nama yang sama di direktori tujuan.
Masalah terpisah adalah bagaimana bertindak pada semua file di direktori saat ini. Ada dua masalah: meraih semua file (
*
menghilangkan file dot) dan tidak berjalan ke baris perintah. Di Linux (atau lebih umum dengan GNU find dan GNU coreutils):Dengan GNU temukan tetapi bukan GNU coreutils (atau GNU coreutils yang lebih tua):
Mudah dibawa:
Seperti biasa zsh membuat segalanya lebih mudah. Itu tidak memiliki batasan panjang baris perintah secara internal, jadi jika Anda menggunakan
mv
builtin Anda tidak perlu khawatir tentang itu. Dan Anda dapat mengatakan itu untuk tidak mengabaikan file dot denganD
kualifikasi glob. Batasan: ini tidak berfungsi lintas sistem file (pada zsh 4.3.10).sumber
Saya katakan di ML kami
jelas ini tidak terlalu aman ... itu akan menimpa banyak hal. Mungkin ada batas yang tidak pernah saya temui.
sumber
-
. Itu tidak akan menangkap file yang namanya dimulai dengan.
.Berikut ini adalah templat python yang saya gunakan untuk efek yang baik di masa lalu.
sumber