Shopt命令搜索问题

时间:2014-09-18 03:13:00

标签: linux bash

我有一个当前脚本来获取文件夹中的所有.jpg和.jpeg文件,我的bash脚本如下

shopt -s nullglob
CURRENT_IMAGE_FILES=($DIR/*.jpg $DIR/*.jpeg)
echo ${#CURRENT_IMAGE_FILES[@]}
shopt -u extglob

输出的结果如下(1.jpg,3.jpg,5.jpg,2.jpeg,4.jpeg)。因为serach首先跟随所有.jpg,然后找到.jpeg的其余部分。

此代码的问题在于它首先获取所有jpg文件,然后获取所有jpeg文件。我想以增量方式获取所有jpg和jpeg文件,如下所示(1.jpg,2.jpeg,3.jpg,4.jpeg,5.jpg)

1 个答案:

答案 0 :(得分:0)

设置extglob后,它就像

一样简单
shopt -s nullglob extglob
CURRENT_IMAGE_FILES=("$DIR"/*.@(jpg|jpeg))

由于单个模式将匹配所有目标文件,因此它们将被排序在一起,而不是对仅匹配*.jpg的文件进行排序,然后对匹配*.jpeg的文件进行排序。当然,排序仅在文件名格式正确时才有效。 10.jpg仍然会在1.jpg之前出现,但是你只能使用globs做很多事情。