Jawaban:
Jika Anda memindahkan direktori pada sistem file yang sama, Anda hanya memindahkan entri direktori dari satu lokasi di sistem file ke yang lain. Misalnya, mv /source/dir /target/dir
akan menghapus entri direktori dir
dari /source
dan membuat yang baru masuk /target
. Itu dilakukan oleh satu panggilan sistem atom (yaitu, tidak terputus). Inode yang berisi entri direktori dir
serta konten sebenarnya dari direktori itu sendiri tidak terpengaruh.
Jika Anda memindahkan direktori dari satu sistem file ke sistem file lainnya, semua file pertama kali disalin ke sistem file baru dan kemudian dihapus tautannya dari yang asli. Jadi, jika Anda menyela mv
saat sedang menyalin, Anda mungkin berakhir dengan dua salinan dari beberapa file - di lokasi lama dan di yang baru.
strace mv /fs1/dir /fs2/
- hal terakhir yang dilakukan mv adalah memanggil unlinkat
semua file sumber sekaligus (tidak satu per satu saat disalin).
Implementasi GNU berulang pada argumen pada baris perintah, mencoba untuk mengubah nama terlebih dahulu, dan, jika gagal, secara rekursif menyalin dan kemudian secara rekursif menghapus sumber. Begitu
mv a b c/
akan menghapus a sebelum menyalin b , dan tidak akan mulai menghapus apa pun dalam a sebelum salinan tujuan selesai.
Perhatikan bahwa ini hanya berlaku untuk implementasi GNU.
Untuk memperjelas: jika a adalah direktori yang berisi d dan e , dan b adalah file, urutannya adalah
mv
juga, jadi itu bukan hanya GNU.
Anda memindahkan satu direktori, menghentikan gerakan, dan direktori asli akan tetap utuh:
$ mv a b/
Jika Anda memindahkan banyak direktori, masing-masing direktori akan utuh pada sumber atau tujuan, tergantung pada kapan Anda menyela:
$ mv a b c/
Bagaimana saya mendapat jawaban saya:
$ mv --version
mv (GNU coreutils) 8.21
$ info mv
... It first uses some of the same code that's used by `cp -a'
to copy the requested directories and files, then (assuming the copy
succeeded) it removes the originals. If the copy fails, then the part
that was copied to the destination partition is removed. If you were
to copy three directories from one partition to another and the copy of
the first directory succeeded, but the second didn't, the first would
be left on the destination partition and the second and third would be
left on the original partition.
Sebagai tes, saya menyalin folder besar ke direktori NFS, terputus, dan jumlah file di folder besar sumber saya tetap sama, dan sebagian konten dibiarkan di direktori NFS. Saya menggunakan "find. -Type f | wc -l" untuk memverifikasi.
Sepertinya jawaban Simon benar.
Jawaban yang diterima jelas salah tentang pindah di antara sistem file - fakta yang menyelamatkan saya dari banyak masalah beberapa kali. Saat memindahkan direktori yang berisi subdirektori, tidak ada file dalam subdirektori yang akan dihapus sebelum seluruh subdirektori disalin. Ini adalah, btw, arti sebenarnya dari "objek demi objek" - subdirektori ADALAH objek (file) dan dengan demikian integritasnya harus dilestarikan dengan salinan lengkap di tempat tujuan sebelum sesuatu dapat dihapus. Jadi jawaban Simon nampak pada saya sebagai jawaban yang benar.
Tidak. Mv mengoperasikan objek demi objek, sehingga objek yang sudah diproses akan dihapus dari sumber.
Jelas tidak. Langkah ini dibuat objek demi objek. Oleh karena itu, objek yang dipindahkan ke tujuan hingga titik interupsi tidak akan ada lagi di sumbernya.
Jika mv dikeluarkan untuk file besar (antara berbeda) dan telah terputus maka sumbernya akan utuh. Pada target Anda akan melihat file yang tidak lengkap hingga titik gangguan.
Namun Anda dapat mengembalikan mv dengan perintah yang sama dan proses akan berlanjut.
Jika Anda ingin menginterupsi mv karena Anda ingin memutuskan sambungan dari terminal, Anda dapat mengirimkannya ke latar belakang:
* press Ctrl+Z
# bg
# disown
fsck
(yang kemungkinan besar akan berjalan secara otomatis saat reboot, karena disk tidak di-unmount dengan bersih).