是否有现成的工具来检查单调递增的文件名列表中的间隙?

是否有现成的工具来检查单调递增的文件名列表中的间隙?

我得到了几百个目录,每个目录下都有数百万个文件。例如

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

我想确保从 000001 到 999999 的每个数字的文件都存在。因此,如果文件A_678123.txt丢失,该工具应该会报告。目前,我正在创建一个位数组,然后它获取一个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

相关内容