Ai-je simplement tout supprimer avec find -exec mv?

26

J'ai essayé de comprendre cela par 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éé de répertoire nommé images en premier. Un fichier nommé pictures.gif a été créé. At-il trouvé les fichiers puis les écraser au fur et à mesure qu'ils les déplaçaient?

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

Les fichiers sont-ils toujours sur le lecteur quelque part?

    
posée jtnewhou 09.05.2013 - 23:08
la source

2 réponses

45

Premièrement: arrêtez d’utiliser ce lecteur maintenant . Il est correct de le remonter en lecture seule, assurez-vous simplement 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 chance de récupérer quoi que ce soit.

Votre commande a exécuté mv pic1.jpg pictures , mv pic2.jpg pictures , etc. Chaque invocation de mv a remplacé le fichier actuellement nommé pictures par une autre image.

Déplacer un fichier (dans le 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. Ainsi, aucune donnée de fichier n'a été modifiée ou supprimée par cette commande, seules les entrées du répertoire correspondant aux images ont disparu.

Vous pouvez exécuter un outil qui parcourt l’espace libre de votre système de fichiers et recherche des éléments qui ressemblent à des fichiers JPEG. Heureusement, chaque fichier JPEG commence par un en-tête reconnaissable. Les outils qui recherchent du contenu supprimé sont appelés outils de sculpture . Il y en a quelques-uns dans Ubuntu, y compris recoverjpeg , , testdisk , ... Si les photos se trouvent sur une partition séparée ou sur un lecteur externe, installez-en une ou plusieurs. de ces paquets et les diriger vers la partition contenant les images supprimées.

Si les photos sont sur votre disque système, vous devez cesser d’utiliser votre système immédiatement. Utilisez un autre ordinateur pour télécharger un CD ou une clé USB et démarrez à partir de celui-ci. N'importe lequel des CD en direct qui incluent testdisk doit correspondre à la facture, mais certains sont plus faciles à utiliser que d'autres. Le CD de secours du système est un bon CD de récupération de système à usage général. Ubuntu Rescue Remix peut être plus familier pour un utilisateur Ubuntu.

Pour référence ultérieure, prenez l'habitude d'utiliser mv -i sauf si vous visez à écraser les fichiers. Vous avez peut-être déjà un alias pour mv , mais il ne se déclenche que lorsque vous tapez mv directement sur la ligne de commande, pas lorsque mv est appelé par un script ou par la commande find .

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

De plus, si vous mettez un / après un nom supposé être le nom d’un répertoire, vous obtiendrez une erreur si le répertoire n’existe pas ou si un fichier contient ce nom. 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 find , vous pouvez utiliser à la place l’outil de récursivité des répertoires 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 des liens symboliques vers des répertoires, et qu’il n’est pas possible de l’éteindre. Si vous voulez un parcours récursif qui ne regarde pas les liens symboliques vers les répertoires, utilisez zsh ou find. )

    
réponse donnée Gilles 09.05.2013 - 23:42
la source
13

Je crains que vous veniez de perdre toutes vos photos dans ce fichier unique. Il est possible de récupérer des fichiers à l’aide d’outils médico-légales , mais avant tout, le taux de réussite diminue. ). (pour être précis, plus la partition est montée longtemps ).

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

find -name "*.jpg" -exec mv -i {} pictures/ {} \;
    
réponse donnée Lekensteyn 09.05.2013 - 23:23
la source

Lire d'autres questions sur les étiquettes