1 votes

Comparer une liste de fichiers à partir d'une base de données en utilisant find pour localiser les fichiers manquants.

J'ai une liste de 2000 fichiers provenant d'une base de données qui ressemble à ceci :

./aa/0f/unique-string/IMG_0987.JPG
./ab/cf/unique-string/IMG_0987.JPG

Je veux comparer cette liste au contenu réel du répertoire afin d'identifier les fichiers manquants.

La commande suivante fonctionne individuellement, mais pas lorsque je la script...

find . -false -samefile ./ab/cf/unique-string/IMG_0987.JPG

Ce que j'ai trouvé de plus proche est le suivant :

#!/bin/bash
TEST=`cat ./list.lst`
find . -false -samefile "$TEST"

Je m'y prends mal. Quelle est la bonne méthode ?

0voto

Jack Points 599

Votre commande find utilise tout le contenu de list.lst parce que vous ne l'alimentez pas d'une ligne à la fois.

while read f; do
find . -false -samefile "$f"
done<./list.lst

Ceci lit le fichier list.lst 1 ligne à la fois.

0voto

MariusMatutiae Points 45233

En suivant votre stratégie, vous ferez environ 2000x2000 = 4,000,000 comparaisons. Vous pouvez faire mieux que ça.

Supposons que la liste soit dans fichier_t1 maintenant nous générons d'abord une liste de tous les fichiers sur le pc au moyen de

      find . -type f > file_t2

Ensuite, nous trions les deux fichiers :

      sort -n file_t1 > file1
      sort -n file_t2 > file2

Maintenant, nous utilisons comm pour générer une liste de différences :

      comm -X file1 file2

où :

      X = 12 -> lines that appear in **both** files
      X = 13 -> lines unique to file 2
      X = 23 -> lines unique to file1

Cela pourrait se faire en une seule phrase, au détriment de la clarté.

Si cela vous intéresse : c'est beaucoup plus rapide car les fichiers sont déjà triés (une exigence stricte pour les comm ), il faut donc N étapes pour les comparer, si la taille du fichier est N. Le tri requiert N log N opérations, qui est donc la partie la plus coûteuse de cette solution, alors que celle que vous avez proposée requiert N^2 opérations, ce qui est nettement plus long pour la taille de vos fichiers.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X