Bash:批量调整图像大小
我正在编写一个Bash脚本,它将获取一个目录数组,遍历它,在每个目录中创建一个名为“processed”的目录,并对目录中的每个文件运行一个命令。这是我的代码(请阅读代码中的注释以了解我的错误)。有什么想法吗Bash:批量调整图像大小,bash,Bash,我正在编写一个Bash脚本,它将获取一个目录数组,遍历它,在每个目录中创建一个名为“processed”的目录,并对目录中的每个文件运行一个命令。这是我的代码(请阅读代码中的注释以了解我的错误)。有什么想法吗 #!/bin/bash command -v convert >/dev/null 2>&1 || { echo >&2 "Convert is not installed. Aborting."; exit 1; } declare
#!/bin/bash
command -v convert >/dev/null 2>&1 || {
echo >&2 "Convert is not installed. Aborting.";
exit 1;
}
declare -a directories_to_process=(
"$HOME/Desktop/Album 1"
"$HOME/Desktop/Album 2"
"$HOME/Desktop/Album 3"
);
for directory in "${directories_to_process[@]}"
do
if [ -d "$directory" ]; then
if [ ! -d "$directory/processed" ]; then
mkdir "$directory/processed"
fi
# Insert code to run the following command on each file in $directory:
#
# convert $directory/$filename -resize 108x108^ -gravity center -extent 108x108 $directory/processed/$filename
fi
done
更新:
以下是工作脚本:
#!/bin/bash
command -v convert >/dev/null 2>&1 || {
echo >&2 "Convert is not installed. Aborting.";
exit 1;
}
directories_to_process=(
"$HOME/Desktop/Album 1"
"$HOME/Desktop/Album 2"
"$HOME/Desktop/Album 3"
);
for directory in "${directories_to_process[@]}"
do
[[ -d $directory ]] || continue
mkdir -p "$directory/processed"
for infile in "$directory"/*.jpg
do
outfile="$directory/processed/${infile##*/}"
convert "$infile" \
-resize '108x108^' \
-gravity center \
-extent 108x108 \
"$outfile"
done
done
将其添加到已注释区域:
for infile in "$directory"/*; do
outfile="$directory/processed/${infile##*/}"
convert "$infile" \
-resize '108x108^' \
-gravity center \
-extent 108x108 \
"$outfile"
done
其他一些注意事项:
-
[-LI]而不是在代码中嵌套大量的逻辑。如果[-D“$Directory”] < /代码>,考虑把<代码> [[-D$Directory ] ]继续在循环的顶部/<代码>以减少嵌套深度。(与
[]
不同,在这种情况下,[[]]
中不需要引用)
而不是测试<代码> [$-Directory /处理] [/COD] >并使用它来决定是否创建目录,考虑无条件运行<代码> MKDIr -p“$Directory /处理”< /C> >,如果目录已经存在,它将以成功的状态退出。
command-v convert
替换为type convert
,这比command-v
语法更为人所知,但具有相同的效果declare-a
;只需目录到进程=(…)
即可引用整个glob是行不通的。将“$directory”/*中的填充更改为
;做
@DennisWilliamson呃——我知道得更清楚。谢谢你的接球。@charlesduff真管用!非常感谢您不仅回答了我的问题,而且提供了改进建议。你真棒!关于我使用的最后一个脚本,请参见我的问题。我坚持使用command-v
,因为根据POSIX很好地定义了command
的退出状态,因此使用它可能是最安全的。注意:如果您将其作为独立脚本使用,请记住首先创建processed
,否则会出现无用的错误。