0

我有一个当前脚本来获取文件夹中的所有 .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)

4

1 回答 1

0

一旦extglob设置,它就像

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

由于单个模式将匹配所有目标文件,因此它们将一起排序,而不是对匹配的文件进行*.jpg排序,然后对匹配的文件进行排序*.jpeg。当然,只有在文件名格式正确的情况下,排序才会起作用。10.jpg仍然会在之前出现1.jpg,但是仅使用 glob 对此您无能为力。

于 2014-09-18T03:32:28.530 回答