在一个很长的列表中找到丢失的文件,其中文件按顺序编号
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。
我有一个包含超过 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。