GNU/Linux >> Belajar Linux >  >> Linux

Apa yang terjadi jika mv terganggu?

Jika Anda memindahkan direktori pada sistem file yang sama, Anda hanya memindahkan entri direktori dari satu lokasi di sistem file ke lokasi lain. Misalnya, mv /source/dir /target/dir akan menghapus entri direktori dir dari /source dan buat yang baru di /target . Itu dilakukan oleh satu panggilan sistem atom (yaitu, tidak dapat 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 diputuskan tautannya dari yang asli. Jadi jika Anda menyela mv saat menyalin, Anda mungkin mendapatkan dua salinan dari beberapa file – di lokasi lama dan di lokasi baru.


Implementasi GNU mengulangi argumen pada baris perintah, mencoba untuk mengganti nama terlebih dahulu, dan, jika gagal, menyalin secara rekursif dan kemudian menghapus sumbernya secara rekursif. Jadi

mv a b c/

akan menghapus a sebelum menyalin b , dan tidak akan mulai menghapus apa pun di a sebelum salinan tujuan selesai.

Perhatikan bahwa ini hanya berlaku untuk implementasi GNU.

Untuk mengklarifikasi: jika a adalah direktori yang berisi d dan e , dan b adalah file, urutannya adalah

  • buat c/a
  • salin a/d -> c/a/d
  • salin a/e -> c/a/e
  • hapus a/d
  • hapus a/e
  • hapus a
  • salin b -> c/b
  • hapus b

Anda memindahkan satu direktori, menghentikan pemindahan, dan direktori asli akan tetap utuh:

$ mv a b/

Jika Anda memindahkan banyak direktori, masing-masing direktori akan utuh di sumber atau tujuan, tergantung kapan Anda menyela:

$ mv a b c/

Bagaimana saya mendapatkan 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 ujian, saya menyalin folder besar ke direktori NFS, terputus, dan jumlah file di folder besar sumber saya tetap sama, dan sebagian konten tertinggal di direktori NFS. Saya menggunakan "find .-type f | wc -l" untuk memverifikasi.

Sepertinya jawaban Simon benar.


Linux
  1. Apa yang terjadi jika Anda menghapus file perangkat?

  2. Apa yang terjadi jika saya menghapus lost+found

  3. Apa tujuan dari direktori setgid?

  1. Apa arti NT_STATUS_BAD_NETWORK_NAME di Samba?

  2. Bisakah kita memasang banyak disk sebagai satu direktori?

  3. Apa arti akhiran .d di Linux?

  1. Untuk Apa Inode Baik?

  2. Bagaimana Cara Memindahkan Satu Direktori ke Bawah?

  3. Apa yang Dikembalikan Perintah Ls -al .*?