在一个很长的列表中找到丢失的文件,其中文件按顺序编号

find missing files in a very long list where files are numbered sequentially

我有一个包含超过 330000 个文件的目录,不幸的是我无法使用 ls。 为了列出它们,我使用 find 并将输出打印在文件 list of files

这些文件是按顺序命名的,因此有一长串 Blast0_1.txt.gz Blast0_2.txt.gz Blast0_3.txt.gz...

这些数字上升到 587,因此文件总数应该是 588x588=345744(因为下划线前后的编号都从 0

开始

缺少一些组合,因为总数应该是 345744 但不幸的是它是 331357。 有没有一种简单的方法可以通过bash找到缺失的组合?我看到网上有一些可用的解决方案,但它们对我不起作用,我不知道如何在我的数据集中调整它们中的任何一个。

非常感谢任何帮助

您可以遍历所有可能的文件名并检查文件是否存在。在我的笔记本电脑上,588x588 组合大约需要 8 秒。

for i in {0..588}; do
    for j in {0..588}; do
        file_name="Blast${i}_${j}.txt.gz"
        [ ! -f $file_name ] && echo "$file_name"
    done
done

这将遍历所有可能的组合,检查文件是否存在,如果不存在,将其文件名打印到控制台。

根据您的命名方案,您可能必须 zero pad the numbers