¿Existen herramientas listas para comprobar si hay lagunas en la lista de nombres de archivos que aumentan monótonamente?

¿Existen herramientas listas para comprobar si hay lagunas en la lista de nombres de archivos que aumentan monótonamente?

Me han proporcionado varios cientos de directorios con millones de archivos en cada uno de ellos. P.ej

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

Quiero asegurarme de que existan archivos para cada número desde 000001 hasta 999999. Entonces, si A_678123.txtfalta el archivo, la herramienta debería informarlo. Actualmente estoy creando una matriz de bits y luego toma una lssalida y establece un 1 para cada posición de bit que corresponde al número de archivo analizado.

¿Existe alguna herramienta (o una combinación de herramientas) que pueda reemplazar mi hacky script en Python?

Respuesta1

Una forma es utilizar una combinación de seq, sorty 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

Es posible que tengas que ajustar los argumentos para seqque coincidan con los nombres de tus archivos.

Una vez que esto funcione, puedes intentar hacerlo sin utilizar archivos temporales:

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

Luego, una vez que esté listo para buscar en todos sus directorios:

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

Debería obtener un resultado similar a este, que enumera cada directorio y cada archivo que falta en ese directorio:

./DirA/
A_000371.txt
./DirB/
A_000881.txt
./DirC/
A_000101.txt
A_000191.txt

información relacionada