是否有現成的工具可以檢查單調遞增的檔案名稱清單中的間隙?

是否有現成的工具可以檢查單調遞增的檔案名稱清單中的間隙?

我已經獲得了數百個目錄,每個目錄中都有數百萬個檔案。例如

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

A_678123.txt我想確保從 000001 到 999999 的每個數字都存在文件。目前我正在建立一個位數組,然後它會取得一個ls輸出並為與解析的檔案編號相對應的每個位元位置設定 1。

有沒有一個工具(或工具組合)可以取代我的 hacky python 腳本?

答案1

seq一種方法是使用、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

相關內容