web-dev-qa-db-fra.com

Comment lister les fichiers récemment supprimés d'un répertoire?

Je ne sais même pas si cela est facilement possible, mais j'aimerais répertorier, si possible, les fichiers récemment supprimés d'un répertoire.

Je recherche une solution ne nécessitant pas la création d'un fichier temporaire contenant un instantané de la structure de répertoire d'origine à comparer, car l'accès en écriture n'est peut-être pas toujours disponible. Edit: S'il est possible d'obtenir le même résultat en stockant l'instantané dans une variable Shell au lieu d'un fichier, cela résoudrait mon problème.

Quelque chose comme:

find /some/directory -type f -mmin -10 -deletedFilesOnly

Edit: OS: J'utilise Ubuntu 14.04 LTS, mais les commandes s’exécuteraient probablement dans une variété de boîtes Linux ou de conteneurs Docker, la plupart ou la totalité devant utiliser ext4, et auxquels Je n'aurais probablement pas accès à des modifications.

6
Marco Roy

Vous pouvez utiliser l'utilitaire debugfs,

debugfs est un système de fichiers simple à utiliser basé sur RAM spécialement conçu à des fins de débogage

Tout d’abord, lancez debugfs /dev/hda13 dans votre terminal (en remplaçant /dev/hda13 par votre propre disque/partition).

(REMARQUE: vous pouvez trouver le nom de votre disque en exécutant df / dans le terminal).

Une fois en mode débogage, vous pouvez utiliser la commande lsdel pour répertorier les inodes correspondant aux fichiers supprimés.

Lorsque les fichiers sont supprimés sous Linux, ils ne sont plus liés mais leurs inodes (Adresses sur le disque où le fichier est présent) ne sont pas supprimés

Pour obtenir les chemins de ces fichiers supprimés, vous pouvez utiliser debugfs -R "ncheck 320236" en remplaçant le numéro par votre inode particulier.

Inode   Pathname
320236  /path/to/file

À partir de là, vous pouvez également inspecter le contenu des fichiers supprimés avec cat. (REMARQUE: vous pouvez également récupérer d'ici si nécessaire).

Great post sur ce ici .

6
nextstep

Merci pour vos commentaires et réponses les gars. debugfs semble être une solution intéressante aux exigences initiales, mais c’est un peu exagéré pour la solution simple et légère que je cherchais; si je comprends bien, le noyau doit être construit avec le support debugfs et le répertoire cible doit être dans un montage debugfs. Malheureusement, cela ne fonctionnera pas vraiment pour mon cas d'utilisation; Je dois être capable de fournir une solution pour les noyaux et les répertoires "basiques" existants.

Comme cela semble pratiquement impossible à réaliser, j'ai pu négocier et assouplir les exigences pour répertorier le montant des fichiers récemment supprimés d'un répertoire, de manière récursive si possible.

Voici la solution que j'ai finalement mise en place:

  1. Une simple commande find canalisée dans wc pour compter le nombre initial de fichiers dans le répertoire cible (de manière récursive). Le résultat peut ensuite être facilement stocké dans une variable shell ou script sans nécessiter un accès en écriture au système de fichiers.

DEL_SCAN_ORIG_AMOUNT=$(find /some/directory -type f | wc -l)

  1. Nous pouvons ensuite réexécuter la même commande ultérieurement pour obtenir le nombre de fichiers mis à jour.

DEL_SCAN_NEW_AMOUNT=$(find /some/directory -type f | wc -l)

  1. Ensuite, nous pouvons stocker la différence entre les deux dans une autre variable et mettre à jour le montant initial.

DEL_SCAN_DEL_AMOUNT=$(($DEL_SCAN_ORIG_AMOUNT - $DEL_SCAN_NEW_AMOUNT));DEL_SCAN_ORIG_AMOUNT=$DEL_SCAN_NEW_AMOUNT

  1. Nous pouvons ensuite imprimer un simple message si le nombre de fichiers a diminué.

if [ $DEL_SCAN_DEL_AMOUNT -gt 0 ]; then echo "$DEL_SCAN_DEL_AMOUNT deleted files"; fi;

  1. Retournez à l'étape 2.

Malheureusement, cette solution ne signale rien si le même nombre de fichiers a été créé et supprimé au cours d'un intervalle, mais ce n'est pas un problème énorme pour mon cas d'utilisation.

Pour contourner ce problème, je devrais stocker la liste des fichiers au lieu du nombre, mais je n'ai pas réussi à le faire avec des variables Shell. Si quelqu'un pouvait comprendre cela, je m'aiderais immensément, car cela satisferait aux exigences initiales!

J'aimerais aussi savoir si quelqu'un a des commentaires sur l'une ou l'autre de ces approches.

0
Marco Roy