Ho appena eliminato tutto con find -exec mv?


26

Ho provato a capirlo da solo. Ecco il comando che ho usato nel terminale:

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

Non ho creato prima una directory chiamata pictures. Quello che è successo è stato creato un file chiamato pictures.gif. Ha trovato i file e li ha sovrascritti mentre li spostava?

Cos'è questo file pictures.gif che è stato creato come risultato di questo comando?

È possibile che i file siano ancora nell'unità da qualche parte?


Mi dispiace che ti sia successo e spero che tu possa recuperare roba. Confuso dal .gif - sarebbe interessante sapere cosa è successo lì.
SEngstrom,

7
Se stai scrivendo il nome di una directory, aggiungilo /! Sempre! Quindi può essere sempre e solo una directory.
Lightness Races with Monica

2
Come dice la risposta principale: smetti di usare quell'unità ora e prova a recuperare i file .jpg cancellati. Per questo, tuttavia, preferirei il PhotoRec open source e multipiattaforma , che conosce molti formati di immagine (Jpg, ma anche diversi file non elaborati, ecc.) Ed è molto accurato.
Olivier Dulac

Risposte:


45

Primo: smetti di usare questa unità ora . Va bene rimontarlo in sola lettura, assicurati solo di non scrivere più. Sì, hai eliminato le foto. Essi possono essere recuperabili, ma più si continuano a utilizzare tale unità, meno possibilità si hanno di recuperare nulla.

Il tuo comando è stato eseguito mv pic1.jpg pictures, mv pic2.jpg picturesecc. Ogni invocazione di mvsovrascriveva il file attualmente nominato picturesda un'altra immagine.

Spostare un file (all'interno dello stesso filesystem) significa staccarlo dalla directory che lo contiene e collegarlo alla directory di destinazione con il nuovo nome. Quindi nessun dato di file è stato modificato o cancellato da questo comando, solo le voci della directory per le immagini che sono scomparse.

Puoi eseguire uno strumento che analizza lo spazio libero del tuo filesystem e cerca cose che sembrano jpeg. Fortunatamente, ogni file jpeg inizia con un'intestazione riconoscibile. Gli strumenti che cercano contenuti eliminati sono chiamati strumenti di intaglio . Ce ne sono alcuni in Ubuntu, inclusi recoverjpeg , soprattutto , testdisk , ... Se le foto si trovano su una partizione home separata o su un'unità esterna, installare uno o più di quei pacchetti e puntarli alla partizione con le immagini cancellate.

Se le foto si trovano sul disco di sistema, è necessario interrompere immediatamente l'utilizzo del sistema. Utilizzare un altro computer per scaricare un CD o USB dal vivo e avviare da questo. Qualsiasi CD live che includa testdisk dovrebbe adattarsi al conto, ma alcuni sono più facili da usare rispetto ad altri. System Rescue CD è un buon CD di ripristino del sistema per tutti gli usi. Ubuntu Rescue Remix potrebbe essere più familiare per un utente Ubuntu.


Per riferimento futuro, prendere l'abitudine di utilizzare a mv -imeno che non si desideri sovrascrivere i file. Potresti già avere un alias per mv, ma questo si mvattiva solo quando digiti direttamente sulla riga di comando, non quando mvviene invocato da uno script o dal findcomando.

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

Inoltre, se si inserisce un /nome post che dovrebbe essere il nome di una directory, verrà visualizzato un errore se la directory non esiste o se esiste un file con quel nome che non è una directory.

$ : >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

Per evitare le insidie ​​di find, è possibile utilizzare invece la funzione ricorsiva di attraversamento della directory di bash. Devi prima accenderlo con il comando shopt -s globstar(puoi aggiungere questa riga al tuo ~/.bashrc. Quindi:

mv **/*.jpg pictures/

(Nota che in bash **/attraversa anche i collegamenti simbolici alle directory e non c'è modo di disattivarlo. Se vuoi un attraversamento ricorsivo che non guardi attraverso i collegamenti simbolici alle directory, usa zsh o find.)


1
Hai omesso il /dopo picturesnella seconda serie di esempi? Cioè, non dovrebbe essere mv foo.jpg pictures/(con il /) in entrambi i mvcomandi?
Paddy Landau,

@PaddyLandau In effetti, questa è stata una davvero brutta copia-incolla o il fallimento di modifica. Grazie per la segnalazione.
Gilles 'SO- smetti di essere malvagio'

13

Temo che tu abbia appena perso tutte le tue foto in quel singolo file. È possibile recuperare alcuni file utilizzando strumenti forensi come il più importante, ma la percentuale di successo diminuisce più si utilizza il supporto (disco). (per essere precisi, più a lungo è montata la partizione .)

La prossima volta, quando intendi una directory, aggiungi una barra e aggiungi l' -iopzione per chiedere conferma nel caso in cui esista già un file:

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

6
Sì, devo ribadire: ENTRATE IMMEDIATAMENTE IN UN CD LIVE! Se si desidera ripristinare questi file, è necessario smettere di utilizzare l'unità ora. E se devi scaricare e masterizzare un'immagine, fallo da un altro computer. Meno attività si verificano su questo disco, maggiori sono le possibilità di ripristino delle foto.
Oli

Grazie per questo. Ho visto prima la tua risposta e immediatamente ho staccato la spina dalla macchina e riavviato con il mio disco di ripristino USB multiboot.
jtnewhou,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.