Apakah saya baru saja menghapus semuanya dengan find -exec mv?

26

Saya mencoba mencari tahu sendiri. Inilah perintah yang saya gunakan di terminal:

find . -name "*.jpg" -exec mv {} pictures \;

Saya tidak membuat direktori bernama gambar terlebih dahulu. Apa yang terjadi adalah file bernama pictures.gif telah dibuat. Apakah itu menemukan file kemudian menimpa mereka ketika memindahkannya?

Apa file pictures.gif ini yang telah dibuat sebagai hasil dari perintah ini?

Apakah file masih ada di drive di suatu tempat?

lihatlah
sumber
Maaf itu terjadi pada Anda dan saya harap Anda dapat memulihkan barang-barang. Bingung dengan .gif - akan menarik untuk mengetahui apa yang terjadi di sana.
SEngstrom
7
Jika Anda menulis nama direktori, tambahkan /! Selalu! Maka itu hanya bisa menjadi direktori.
Races Lightness dengan Monica
2
Seperti jawaban teratas mengatakan: hentikan penggunaan drive itu sekarang, dan cobalah untuk memulihkan file .jpg yang dihapus. Untuk ini, bagaimanapun, saya lebih suka PhotoRec open-source dan lintas-platform , yang tahu banyak format gambar (Jpg, tetapi juga file mentah yang berbeda, dll) dan sangat teliti.
Olivier Dulac

Jawaban:

45

Pertama: berhenti menggunakan drive ini sekarang . Tidak apa-apa untuk me-remount-nya read-only, tapi pastikan untuk tidak menulis lagi. Ya, Anda sudah menghapus gambar. Mereka mungkin dapat dipulihkan, tetapi semakin Anda terus menggunakan drive itu, semakin sedikit kesempatan Anda untuk memulihkan apa pun.

Perintah Anda berjalan mv pic1.jpg pictures,, mv pic2.jpg picturesdll. Setiap doa mvmenimpa file yang saat ini dinamai picturesoleh gambar lain.

Memindahkan file (dalam sistem file yang sama) berarti melepaskannya dari direktori yang berisi dan melampirkannya ke direktori target dengan nama baru. Jadi tidak ada data file yang dimodifikasi atau dihapus oleh perintah ini, hanya entri direktori untuk gambar yang telah hilang.

Anda dapat menjalankan alat yang menjelajahi ruang kosong sistem berkas Anda dan mencari hal-hal yang terlihat seperti jpegs. Untungnya, setiap file jpeg dimulai dengan header yang dapat dikenali. Alat yang mencari konten yang dihapus disebut alat ukiran . Ada beberapa di Ubuntu, termasuk recoverjpeg , terutama , TestDisk , ... Jika foto adalah pada partisi rumah yang terpisah atau pada drive eksternal, instal satu atau lebih dari paket tersebut dan mengarahkan mereka ke partisi dengan gambar-gambar dihapus.

Jika foto ada di disk sistem Anda, Anda harus segera berhenti menggunakan sistem Anda. Gunakan komputer lain untuk mengunduh CD atau USB langsung dan boot dari sana. Setiap CD langsung yang menyertakan testdisk harus sesuai dengan tagihan, tetapi beberapa lebih mudah digunakan daripada yang lain. CD Penyelamatan Sistem adalah CD penyelamatan sistem untuk tujuan umum yang baik. Ubuntu Rescue Remix mungkin lebih akrab bagi pengguna Ubuntu.


Untuk referensi di masa mendatang, biasakan menggunakan mv -ikecuali Anda bertujuan untuk menimpa file. Anda mungkin sudah memiliki alias untuk mv, tetapi itu hanya menendang ketika Anda mengetik mvlangsung pada baris perintah, bukan ketika mvdipanggil oleh skrip atau oleh findperintah.

$ : >pictures
$ mv -i foo.jpg pictures
mv: overwrite `pictures'?

Juga, jika Anda meletakkan / setelah yang seharusnya menjadi nama direktori, Anda akan mendapatkan kesalahan jika direktori tidak ada, atau jika ada file dengan nama itu yang bukan direktori.

$ : >pictures
$ mv foo.jpg pictures/
mv: cannot move `foo.jpg' to `pictures/': Not a directory
$ rm pictures
$ mv foo.jpg pictures/
mv: cannot move `foo.jpg' to `pictures/': Not a directory

Untuk menghindari jebakan find, Anda dapat menggunakan fitur direktori traversal rekursif bash sebagai gantinya. Anda harus menyalakannya terlebih dahulu dengan perintah shopt -s globstar(Anda dapat menambahkan baris ini ke~/.bashrc . Lalu:

mv **/*.jpg pictures/

(Perhatikan bahwa dalam bash, **/juga melintasi tautan simbolik ke direktori, dan tidak ada cara untuk mematikannya. Jika Anda menginginkan traversal rekursif yang tidak melihat melalui tautan simbolik ke direktori, gunakan zsh atau temukan.)

Gilles 'SANGAT berhenti menjadi jahat'
sumber
1
Apakah Anda menghilangkan /setelah picturesdalam kumpulan contoh kedua? Yaitu, bukankah seharusnya mv foo.jpg pictures/(dengan /) di kedua mvperintah?
Paddy Landau
@ PaddyLandau Memang, ini benar - benar buruk copy-paste atau kegagalan edit. Terima kasih atas laporannya.
Gilles 'SANGAT berhenti menjadi jahat'
13

Saya khawatir Anda baru saja kehilangan semua gambar Anda ke dalam satu file. Dimungkinkan untuk memulihkan beberapa file menggunakan alat forensik seperti yang paling utama, tetapi tingkat keberhasilan turun semakin lama Anda menggunakan media (disk). (tepatnya, semakin lama partisi dipasang .)

Lain kali, ketika Anda bermaksud direktori, tambahkan garis miring dan tambahkan -iopsi untuk meminta konfirmasi jika file sudah ada:

find -name "*.jpg" -exec mv -i {} pictures/ {} \;
Lekensteyn
sumber
6
Ya saya harus menekankan kembali: DAPATKAN KE LINGKUNGAN CD LANGSUNG SEGERA! Jika Anda ingin file-file ini kembali, Anda harus berhenti menggunakan drive sekarang. Dan jika Anda perlu mengunduh dan membakar gambar, lakukan dari komputer lain. Semakin sedikit aktivitas yang terjadi pada disk ini, semakin besar kemungkinan foto Anda dipulihkan.
Oli
Terima kasih untuk ini. Saya melihat jawaban Anda pertama dan segera menarik steker pada mesin dan reboot dengan disk penyelamatan usb multiboot saya.
jtnewhou