假设目录中的文件以数字命名,我如何找到丢失的数字?
例如,在当前目录中,
$ ls
0000.png 0002.png 0004.jpg 0005.png 0007.jpg
0001
,0003
和0006
丢失了。
感谢。
答案 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)}}'