我正在编写一个脚本来批量调整图像大小。最初我正在应用 operation for file in $(ls $1)
,但我希望能够使用 globbing,所以我正在寻找更像for file in $(echo $1)
. 问题是 dotglob 可能会或可能不会启用,因此echo *
可能会返回隐藏文件(特别是 .DS_Store),这会导致convert
引发错误并停止脚本。我希望该命令的默认行为是,如果我cd
进入一个充满图像的目录并执行resize * 400x400 jpg
,所有图像都将调整大小,不包括隐藏文件,无论是否启用了 dotglob。
所以,在伪代码中,我正在寻找:
for file in $(echo $1 | [filter-hidden-files])
这是我的旧行为脚本。当我找到解决方案时将更新新行为:
# !/bin/bash
# resize [folder] [sizeXxsizeY] [outputformat]
# if [outputformat] is omitted, the input file format is assumed
for file in $(ls $1)
do
IMGNAME=$(echo "$file" | cut -d'.' -f1)
if test -z $3
then
EXTENSION=$(echo "$file" | cut -d'.' -f2)
convert $1/$file -resize $2 -quality 100 $1/$IMGNAME-$2.$EXTENSION
echo "$file => $IMGNAME-$2.$EXTENSION"
else
convert $1/$file -resize $2 -quality 100 $1/$IMGNAME-$2.$3
echo "$file => $IMGNAME-$2.$3"
fi
done
这是当前脚本:
# !/bin/bash
# resize [pattern] [sizeXxsizeY] [outputformat]
# if [outputformat] is omitted, the input file format is assumed
for file in $(echo $1)
do
IMGNAME=$(echo "$file" | cut -d'.' -f1)
if test -z $3 && if test -f $3
then
EXTENSION=$(echo "$file" | cut -d'.' -f2)
convert $file -resize $2 -quality 100 $IMGNAME-$2.$EXTENSION
echo "$file => $IMGNAME-$2.$EXTENSION"
else
convert $file -resize $2 -quality 100 $IMGNAME-$2.$3
echo "$file => $IMGNAME-$2.$3"
fi
done
给定命令resize * 400x400
,convert 会抛出错误,因为它无法处理 .DS_Store(OSX 系统上每个文件中的隐藏文件)。因为我永远不会处理隐藏的图像,所以我想自动过滤它们。我一直在尝试使用 grep 或 find 来执行此操作,但我还没有弄清楚。
新脚本在这里:
for file in $(echo $1)
do