列出模式中缺失的文件名

列出模式中缺失的文件名
  1. 我有很多以数字开头然后用说明连字符连接的文件。例如:

    001 - awesomesauce
    216 - stillawesomesauce
    
  2. 它们按子目录组织

那么,我将如何使用bash脚本或这些目录中的一些内置查看来查看是否按顺序丢失了某个数字?即报告我在上面的示例中缺少002、等。128我知道我可以ls {000..216}\ -*,它会列出文件,如果找不到它会抛出错误,但是有没有更好的方法来获取丢失的文件并递归执行?

答案1

gnu设置上你可以运行:

myarr=( $(find . -type f -name '[0-9][0-9][0-9]*' -printf '%f\n' | cut -c1-3 | sort -n) )
join -v1 <(seq -w ${myarr[-1]}) <(printf '%s\n' ${myarr[@]})

或者,使用zsh,您可以尝试这样的操作:

myarr=( **/[0-9][0-9][0-9]*(.one_'REPLY=${${REPLY:t}:0:3}'_) )
mynums=( {001..$myarr[-1]} )
print -l ${mynums:|myarr}

它从每个文件名中提取数字(前三位),对它们进行排序并将结果保存在数组中 - myarr。然后它设置另一个数组 -mynums包含从001最后一个索引的值开始的数字(即从文件名中提取的最大数字),然后使用参数扩展myarr从 的扩展中删除 中的值mynums

答案2

我写findmissingPython 脚本就是这样做的。我在 macOS 上开发了它,但它应该可以在任何平台上运行。我测试了使用 Python 2.7 和 3.6 运行它。

这是我的脚本的实际效果:

$ cat sampleFile.txt | python findmissing.py -p "DSC003\.(\d+)"
12
13
14
16
17
18
22
23
24

...提供以下文件时输出:

Id                                  Name         Type   Size     Created
1Dgt5ZFKT3zilwPZdiPyPmhM0Y3Fz_xo8   DSC003.010   bin    1.1 GB   2018-06-12 16:57:14
16QPadXBXPGIwiRhzMFRuY7tZkdIlJ1DI   DSC003.011   bin    1.1 GB   2018-06-12 16:54:57
1zD492J3F42Azeoct82DMlXRRuWA8AUiY   DSC003.015   bin    1.1 GB   2018-06-12 17:32:12
1bah8OM_F49BNeoct8M2DlXRRuOD8AUiY   DSC003.019   bin    1.1 GB   2018-06-12 17:24:41
1eZfY4qn3Ol6w1BFafQn6YDy1uOU82NNA   DSC003.020   bin    1.1 GB   2018-06-12 17:21:46
1x-P84Jq1cyuJCW2Opvy4m_qOjOHvAKtA   DSC003.021   bin    1.1 GB   2018-06-12 17:27:16
1O4TjR8Cl31A5qxHkyVmhmukp4dofCO3t   DSC003.025   bin    1.1 GB   2018-06-12 17:36:00

相关内容