単調に増加するファイル名のリストにギャップがないかチェックするツールは用意されていますか?

単調に増加するファイル名のリストにギャップがないかチェックするツールは用意されていますか?

それぞれに数百万のファイルがある数百のディレクトリが与えられました。例:

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

000001 から 999999 までのすべての番号のファイルが存在することを確認したいです。したがって、ファイルがA_678123.txt見つからない場合は、ツールがそれを報告する必要があります。現在、ビット配列を作成しており、出力を取得してls、解析されたファイル番号に対応するすべてのビット位置に 1 を設定します。

私のハッキーな Python スクリプトを置き換えることができるツール (またはツールの組み合わせ) はありますか?

答え1

seq1 つの方法は、、、sortおよびを組み合わせて使用​​することです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

seqファイル名に合わせて引数を調整する必要があるかもしれません。

それが機能したら、一時ファイルを使用せずに実行してみてください。

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

次に、すべてのディレクトリを検索する準備ができたら、次の手順を実行します。

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

次のような出力が得られ、各ディレクトリとそのディレクトリ内の不足しているファイルがすべてリストされます。

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

関連情報