按顺序查找按编号命名的文件但丢失

时间:2014-11-08 03:46:56

标签: bash

假设目录中的文件以数字命名,我如何找到丢失的数字?

例如,在当前目录中,

$ ls
0000.png 0002.png 0004.jpg 0005.png 0007.jpg

000100030006丢失了。

感谢。

3 个答案:

答案 0 :(得分:2)

您可以在bash中使用这样的脚本:

shopt -s extglob
shopt -s nullglob
arr=( +([0-9]).@(jpg|png) )

for (( i=10#${arr[0]%.*}; i<=10#${arr[-1]%.*}; i++ )); do
   printf -v f "%04d" $i;
   [[ ! -f "$(echo "$f".*)" ]] && echo "$f is missing"
done
0001 is missing
0003 is missing
0006 is missing

非常感谢@gniourf_gniourf在下面提出的宝贵意见,以修复此脚本。

答案 1 :(得分:1)

 for i in {0000..0007}; do [ ! -e ${i}.* ] && echo "$i"; done

输出:

0001
0003
0006

先决条件:不应该有相同前缀的文件(例如0003.png和0003.jpg)。

答案 2 :(得分:1)

这是我的答案:关键点是通过将seen添加到$ 1来强制整数作为0数组的索引,通过适当使用ls和FS保证为整数

关于跟踪最大值,输入进行排序,但谁知道...

修改

<德尔> ls [0-9][0-9][0-9][0-9].* | awk -F. '

为忠实地考虑OP请求,我修改了我的代码的第一行

ls [0-9][0-9][0-9][0-9].{png,jpg} | awk -F. '
   /./ { seen[$1+0] = 1; m = $1>m ? $1 : m }
   END { for(i=0;i<m;i++) {
             printf( seen[i]? "" : "No file named %4.4d.{png,jpg} in here\n",i)}}'