Existem ferramentas prontas para verificar lacunas na lista de nomes de arquivos que estão aumentando monotonicamente?

1

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

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

Eu quero garantir que os arquivos existam para cada número de 000001 até 999999. Portanto, se o arquivo A_678123.txt estiver faltando, a ferramenta deve informar isso. Atualmente estou criando um pouco array & em seguida, ele recebe uma saída ls e define um 1 para cada posição de bit que corresponde ao número de arquivo analisado.

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

    
por socgen hacker 10.03.2015 / 22:28

1 resposta

1

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

Você pode ter que ajustar os argumentos para seq para corresponder aos nomes dos seus arquivos.

Quando isso estiver funcionando, você poderá 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 você estiver pronto para pesquisar em 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 essa, que lista cada diretório e cada arquivo ausente nesse diretório:

./DirA/
A_000371.txt
./DirB/
A_000881.txt
./DirC/
A_000101.txt
A_000191.txt
    
por 11.03.2015 / 01:00

Tags