Existe-t-il des outils prêts à vérifier les lacunes dans la liste des noms de fichiers qui augmentent de façon monotone?


1

On m'a donné plusieurs centaines de répertoires contenant des millions de fichiers dans chacun d'eux. Par exemple.

DirA
+----+ A_000001.txt
     |
     + A_000002.txt
     |
     + ... etc..

Je veux m'assurer que les fichiers existent pour chaque numéro de 000001 à 999999. Donc si le fichier A_678123.txt est manquant, l'outil doit le signaler. Actuellement, je crée un tableau de bits & amp; alors il faut un ls sortie et définit un 1 pour chaque position de bit qui correspond au numéro de fichier analysé.

Existe-t-il un outil (ou une combinaison d’outils) pouvant remplacer mon script Halky Python?

Réponses:


1

L’une des méthodes consiste à utiliser une combinaison de seq, sort, et uniq:

# Get a list of all the files in DirA
cd DirA
ls . > files.txt
# Get a list of all expected files
seq -f "A_%06.0f.txt" 0 999999 > expected.txt
# Find unique entries
sort files.txt expected.txt | uniq -u

Vous devrez peut-être ajuster les arguments pour seq faire correspondre les noms de vos fichiers.

Une fois que cela fonctionne, vous pouvez essayer de le faire sans utiliser de fichiers temporaires:

cd DirA
sort <(ls .) <(seq -f "A_%06.0f.txt" 0 999) | uniq -u

Ensuite, une fois que vous êtes prêt à parcourir tous vos répertoires:

for d in ./*/; do
  pushd "$d"
  sort <(ls .) <(seq -f "A_%06.0f.txt" 0 999) | uniq -u
  popd
done

Vous devriez obtenir une sortie similaire à celle-ci, qui répertorie chaque répertoire et chaque fichier manquant de ce répertoire:

./DirA/
A_000371.txt
./DirB/
A_000881.txt
./DirC/
A_000101.txt
A_000191.txt
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.