Saya seret dan jatuhkan folder ke folder lain karena kesalahan di FileZilla.
~/big_folder
~/some_other_folder
Folder yang dipindahkan adalah yang sangat besar. Ini termasuk ratusan ribu file (node_modules, file gambar kecil, banyak folder)
Yang sangat aneh adalah bahwa setelah saya melepaskan mouse saya, pemindahan selesai. Folder "big_folder" dipindahkan ke "some_other_folder".
~/some_other_folder/big_folder
(tidak ada big_folder
di ~/
setelah pindah)
Kemudian saya menyadari kesalahan dan mencoba mundur tetapi gagal pada FileZilla dan terminal.
Lalu saya harus cp -r
menyalin file kembali karena ada kode sisi server mengakses file-file di~/big_folder
Dan butuh selamanya untuk menunggu ...
Apa yang harus saya lakukan?
BTW, berikut ini adalah output dari FileZilla (ini adalah kegagalan untuk kembali):
Status: Renaming '/root/big_folder' to '/root/some_other_folder/big_folder'
Status: /root/big_folder -> /root/some_other_folder/big_folder
Status: Renaming '/root/some_other_folder/big_folder' to '/root/big_folder'
Command: mv "big_folder" "/root/big_folder"
Error: mv /root/some_other_folder/big_folder /root/big_folder: received failure with description 'Failure'
received failure with description 'Failure'
,.mv /root/some_other_folder/big_folder /root/big_folder
. Apa pesan kesalahan yang Anda dapatkan?cp -al
mv vs cp
Pertanyaan OP ditanggapi, tetapi saya ingin mendengar mengapa dia bisa memindahkan folder dalam satu arah secara instan tetapi tidak pada yang lainnya.Jawaban:
Jika suatu direktori dipindahkan dalam sistem file yang sama (partisi yang sama), maka yang diperlukan hanyalah mengubah nama path file direktori tersebut. Tidak ada data selain entri direktori untuk direktori itu sendiri yang harus diubah.
Saat menyalin direktori, data untuk setiap file perlu diduplikasi. Ini melibatkan membaca semua sumber data dan menuliskannya di tempat tujuan.
Memindahkan direktori antar sistem file akan melibatkan menyalin data ke tujuan dan menghapusnya dari sumber. Ini akan memakan waktu selama menyalin (menggandakan) data dalam sistem file tunggal.
Jika FileZilla berhasil mengubah nama direktori dari
~/big_folder
menjadi~/some_other_folder/big_folder
, maka saya akan mengembalikannya menggunakan... setelah pembuatan pertama yakin bahwa tidak ada direktori yang disebut
~/big_folder
(jika ada, langkah tersebut akan dimasukkanbig_folder
darisome_other_folder
ke~/big_folder
direktori sebagai subfolder).sumber
mv ~/some_other_folder/big_folder ~/
setelah memastikan tidak ada yang lainbig_folder
di direktori home. Saya belum pernah menggunakan FileZilla.Jawaban yang ada bagus, tapi saya ingin sedikit mengembangkannya dengan menunjukkan dengan tepat apa yang terjadi ketika Anda bergerak versus ketika Anda menyalin file. Ketika Anda melihat syscalls selama salinan, Anda melihat:
Ini membuka file sumber, lalu membuat file kedua. Kemudian membaca isi file sumber ke memori dan menulis memori itu ke file tujuan. Ini memerlukan beberapa sakelar konteks dan beberapa disk I / O yang dapat cukup tinggi untuk file besar. Namun jika Anda memindahkan file, Anda melihat:
Penting untuk diingat bahwa Anda hanya akan melihat nama file diubah jika berada pada partisi yang sama pada disk fisik yang sama. Jika Anda membuat file besar multi-gigabyte dan kemudian memindahkannya di antara dua lokasi di rumah Anda, Anda akan melihat tindakan selesai secara instan. Jika, di sisi lain, Anda memindahkannya ke perangkat eksternal, itu akan memakan waktu lama untuk bergerak seolah-olah Anda menggunakannya
cp
sebagai gantinya. Ini karena memindahkan file hanya dapat dilakukan dengan mengubah nama file jika berada di partisi yang sama.sumber
getdents()
danmkdir()
ditaburkan di sekitar.