我在这里找到了一个帖子我怎样才能运行 mogrify,但要在文件名前加上前缀?这是关于调整一批图像的大小。
其中有一个for in
shell 脚本。我该如何排除一些单个文件,同时迭代大多数其他文件。
for image in *.png; do convert "$image" -resize 29.5% "$(dirname $image)/th_$(basename $image)"; done
例如:
我的文件夹中有这些文件(没有任何通用名称,如相同的前缀):
example_1_some_suffix.png
some_prefix_example_2.png
example_3.png
example_4.png
example_a.png
我可以用来for images in *.png
迭代全部,但如果我只想处理前四个文件而忽略第五个文件怎么办?
答案1
您可以打开 extglob 以便能够更详细地指定掩码
shopt -s extglob
for image in ?(a)+(b)*.png ; do ...
如果你只是想跳过给定的文件,你可以这样做
for image in *.png ; do
[[ $image == file-to-skip.png ]] && continue
...
答案2
假设您有 bash 版本 4:
declare -A exceptions=(
[example_1_some_suffix.png]=skip
[some_prefix_example_2.png]=skip
[example_3.png]=skip
[example_4.png]=skip
[example_a.png]=skip
)
for image in *.png; do
[[ "${exceptions["$image"]}" == skip ]] && continue
# ...
不使用关联数组:
exceptions=(
example_1_some_suffix.png
some_prefix_example_2.png
example_3.png
example_4.png
example_a.png
)
for image in *.png; do
[[ " ${exceptions[*]} " == *" $image "* ]] && continue
# ...
所有引号和空格均必填。