Secara umum, saya merasa panik ketika saya menyadari bahwa jika saya membatalkan pemindahan file, itu dapat menyebabkan target atau sumber menjadi tidak lengkap. Pertanyaan ini berlaku untuk platform berbasis Windows dan Unix. Saya tidak pernah ingat persis bagaimana perintah pindah bekerja dalam kedua kasus. Misalnya, jika Anda memindahkan direktori; apakah itu menyalin seluruh direktori, dan kemudian menghapusnya, atau apakah itu menyalin dan kemudian menghapus setiap file secara individual?
Saya selalu menyadari, setelah mengetikkan sesuatu seperti mv verybigdir dest
, bahwa saya mungkin harus mengetik cp -R verybigdir dest && rm -R verybigdir
(di mana &&
operator melanjutkan ke perintah berikutnya hanya jika yang pertama berhasil) - atau apakah ini tidak ada gunanya? Apa yang terjadi, tepatnya, ketika saya menekan Ctrl+ Csetengah dari suatu langkah? Demikian juga, apa yang sebenarnya terjadi pada Windows ketika saya menekan tombol batal?
Saya tidak dapat menghitung berapa kali saya memindahkan sesuatu (terakhir kali ketika menggunakan svn
) dan memiliki dua direktori, dengan konten terbagi. Saya kira jawabannya sulit, karena tidak semua aplikasi memindahkan grup file dengan cara yang sama.
sumber
Jawaban:
Di Windows, pindah ke drive dan partisi yang sama akan bertindak seperti perintah mv Unix dan mengganti nama folder atau mengubah induknya. Namun, jika Anda memindahkannya ke driver atau partisi lain, itu akan menyalin dan menghapus file dengan file, maka mengapa lebih efisien untuk menggunakan file tar atau file zip tanpa kompresi untuk memindahkan file lebih cepat melintasi partisi dan hard drive . Jika Anda membatalkannya, itu hanya akan berhenti di tempatnya. Saya akan percaya hal yang sama berlaku untuk Unix tetapi saya tidak cukup bereksperimen dengan itu untuk menjadi 100% yakin. Ini hanya masalah mengubah inode, tetapi jika ada di partisi atau drive lain, maka itu perlu disalin ke sektor-sektor di partisi atau drive itu. Jika Anda membatalkannya selama transfer, itu sudah memindahkan beberapa file, dan file yang sedang ditransfer akan melihatnya '
Pembaruan: Jika Anda ingin membatalkan suatu langkah dan ingin melanjutkannya, cukup terbitkan kembali urutan untuk pindah. Mungkin memperingatkan Anda bahwa folder tujuan sudah ada, tetapi file tidak akan ditimpa (kecuali mereka ada sebelum perpindahan asli, atau ditambahkan di antara dua perintah pemindahan) karena segera setelah ditransfer, mereka dihapus dari sumber (jika pada partisi atau drive yang berbeda).
sumber
Bahkan pada komputer yang sangat stabil yang tidak pernah gagal: jika Anda peduli dengan cap waktu, maka
mv
itu lebih baik daripada poloscp
.(
cp -a
akan menyimpan stempel waktu untuk Anda, dan saya menganggap sesuatu yang serupa ada di Windows).sumber
Tidak.
Penjelasan:
mengganti nama verybigdir ke dest. Ini adalah operasi atom, yaitu tidak bisa gagal di tengah jalan.
Jika dest ada di perangkat lain, mv akan menyalin terlebih dahulu, lalu menghapus versi yang lama. Ini bukan operasi atom. Jika gagal, Anda mungkin hanya memiliki sebagian salinan verybigdir di dest, tetapi verybigdir masih akan lengkap.
Ya, aplikasi lain mungkin memindahkan file secara berbeda.
sumber
mv verybigdir/* dest
.mv verybigdir/* dest
membagi mv dari verybigdir menjadi banyak operasi pemindahan yang terpisah. Selalu ingat bahwa tidak seperti pada Windows, program / alat Linux tidak dapat melihat bahwa "*" di sana, itu diperluas oleh shell.Di windows saya selalu menyalin dan menghapus alih-alih pindah. Saya pernah memindahkan file dan di sinilah saya pertama kali melihat memory stick yang buruk. Ketika memindahkan file itu berhenti di antara dan saya mendapat kesalahan jadi saya memeriksa folder sumber dan file itu hilang kemudian saya memeriksa tujuan dan ada file yang rusak. Ini terjadi lebih sering dengan file ukuran lebih besar dan kebanyakan dari mereka adalah unduhan yang memakan waktu berjam-jam jadi saya sarankan menyalin dan kemudian menghapus. Hemat waktu Anda di awal akan terbayar pada akhirnya.
sumber
Pada unix, pada gerakan yang tidak melewati batas sistem file,
mv
tidak menyalin data: itu hanya memperbarui database inode di berbagai direktori. Ini jauh lebih cepat daripadacp
pada file besar.Lebih jauh lagi, menggunakan
mv
batasan sistem file hanya secara diam-diam memanggil mekanisme salin dan hapus.Jadi saya pikir Anda harus memilih
mv
.sumber
Di Windows, setidaknya, perpindahan hanyalah Copy & Delete yang lebih otomatis. Saya percaya saya memindahkan setiap file satu per satu, artinya ^ c-ing tidak akan kehilangan file apa pun, Anda hanya akan berakhir dengan file Anda terbagi di antara dua tempat - tidak seperti Windows Explorer, yang akan memindahkan semua file saat dibatalkan.
Solusi saya untuk ini adalah: Jangan pernah bergerak kecuali saya yakin saya ingin memindahkannya.
sumber
Jika Anda menggunakan ACL pada sistem file sumber, tetapi tidak pada tujuan, mv di Linux akan menyalin sumber dan kemudian - karena ketidakmampuan untuk mengatur ACL pada tujuan - berhenti. Jadi Anda akhirnya memiliki file di kedua sisi. Tidak ada saklar dalam mv untuk mencegah perilaku itu sehingga dalam hal ini cp &&rm lebih disukai.
sumber