web-dev-qa-db-fra.com

Est-ce que je viens de tout supprimer avec find -exec mv?

J'ai essayé de comprendre cela moi-même. Voici la commande que j'ai utilisée dans le terminal:

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

Je n'ai pas créé un répertoire nommé images en premier. Un fichier nommé pictures.gif a été créé. At-il trouvé les fichiers puis les écrasé au fur et à mesure de leur déplacement?

Quel est ce fichier pictures.gif créé à la suite de cette commande?

Les fichiers sont-ils toujours éventuellement sur le disque quelque part?

26
jtnewhou

Premièrement: arrêtez d'utiliser ce lecteur maintenant . Vous pouvez le remonter en lecture seule, mais assurez-vous de ne plus écrire. Oui, vous avez supprimé les images. Ils peuvent être récupérables, mais plus vous continuez à utiliser ce lecteur, moins vous avez de chances de récupérer quoi que ce soit.

Votre commande a exécuté mv pic1.jpg pictures, mv pic2.jpg pictures, etc. Chaque appel de mvremplaçait le fichier appelé picturespar une autre image.

Déplacer un fichier (au sein du même système de fichiers) signifie le détacher du répertoire qui le contient et le joindre au répertoire cible sous le nouveau nom. Donc, aucune donnée de fichier n'a été modifiée ou supprimée par cette commande, seules les entrées du répertoire des images ayant disparu.

Vous pouvez exécuter un outil qui parcourt l'espace libre de votre système de fichiers et cherche des éléments qui ressemblent à des jpeg. Heureusement, chaque fichier jpeg commence par un en-tête reconnaissable. Les outils qui recherchent du contenu supprimé sont appelés des outils de sculpture . Il y en a quelques-uns dans Ubuntu, notamment recoverjpeg , avant tout , testdisk ,… Si les photos se trouvent sur une partition de départ distincte ou sur un lecteur externe , installez un ou plusieurs de ces packages et pointez-les vers la partition contenant les images supprimées.

Si les photos se trouvent sur votre disque système, vous devez immédiatement cesser d'utiliser votre système. Utilisez un autre ordinateur pour télécharger un live CD ou une clé USB et démarrer à partir de celui-ci. N'importe lequel des CD live comprenant testdisk devrait convenir, mais certains sont plus faciles à utiliser que d'autres. CD de secours système est un bon CD de secours système polyvalent. buntu Rescue Remix sera peut-être plus familier pour un utilisateur Ubuntu.


Pour référence ultérieure, prenez l’habitude d’utiliser mv -i sauf si vous souhaitez écraser des fichiers. Vous avez peut-être déjà un alias pour mvname__, mais cela ne prend effet que lorsque vous tapez mvdirectement sur la ligne de commande, et non lorsque mvest appelé par un script ou par la commande findname__.

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

De plus, si vous mettez un / après un nom censé être le nom d'un répertoire, vous obtiendrez une erreur si le répertoire n'existe pas ou s'il existe un fichier de ce nom qui n'est pas un répertoire. .

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

Pour éviter les pièges de findname__, vous pouvez utiliser la fonction de traversée de répertoire récursive de bash. Vous devez d'abord l'activer avec la commande shopt -s globstar (vous pouvez ajouter cette ligne à votre ~/.bashrc. Ensuite:

mv **/*.jpg pictures/

(Notez que dans bash, **/ traverse également les liens symboliques vers les répertoires, et il est impossible de désactiver cette option. Si vous souhaitez une traversée récursive qui ne recherche pas dans les liens symboliques vers les répertoires, utilisez zsh ou find.)

45
Gilles

J'ai bien peur que vous veniez de perdre toutes vos photos dans ce fichier unique. Il est possible de récupérer certains fichiers à l’aide d’outils d’investigation comme d’abord, mais le taux de réussite est d'autant plus long que vous utilisez le support (disque). (pour être précis, plus la partition est montée longtemps .)

La prochaine fois, lorsque vous parlerez d'un répertoire, ajoutez-y une barre oblique et ajoutez l'option -i pour demander une confirmation au cas où un fichier existe déjà:

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