Existem ferramentas prontas para verificar lacunas na lista de nomes de arquivos que aumentam monotonicamente?

Existem ferramentas prontas para verificar lacunas na lista de nomes de arquivos que aumentam monotonicamente?

Recebi centenas de diretórios com milhões de arquivos em cada um deles. Por exemplo

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

Quero garantir que os arquivos existam para cada número de 000001 a 999999. Portanto, se o arquivo A_678123.txtestiver faltando, a ferramenta deverá informar isso. Atualmente estou criando uma matriz de bits e, em seguida, ela obtém uma lssaída e define 1 para cada posição de bit que corresponde ao número do arquivo analisado.

Existe uma ferramenta (ou uma combinação de ferramentas) que pode substituir meu script hacky python?

Responder1

Uma maneira é usar uma combinação de seq, sorte 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

Talvez seja necessário ajustar os argumentos para seqcorresponder aos nomes dos seus arquivos.

Quando estiver funcionando, você pode tentar fazer isso sem usar arquivos temporários:

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

Então, quando estiver pronto para pesquisar todos os seus diretórios:

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

Você deve obter uma saída semelhante a esta, que lista cada diretório e todos os arquivos ausentes nesse diretório:

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

informação relacionada