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.txt
estiver faltando, a ferramenta deverá informar isso. Atualmente estou criando uma matriz de bits e, em seguida, ela obtém uma ls
saí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
, 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
Talvez seja necessário ajustar os argumentos para seq
corresponder 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