目前我有以下 bash 脚本,用于获取目录中所有文件的宽度和高度:
ls | cat -n | while read n f; do
width=$(identify -format "%w" "$f")
height=$(identify -format "%h" "$f")
echo "$width , $height"
done
如何仅获取文件名以 结尾的文件的高度/宽度-example99.jpg
?
答案1
for filename in *-example99.jpg
do
width=$(identify -format "%w" "$filename")
height=$(identify -format "%h" "$filename")
done
答案2
这里不需要循环,只需:
identify -format "%w , %h\n" ./*-example99.jpg
(%f
如果您还需要文件名,请添加到格式中)。
为了避免identify
每个文件运行 2 个命令,您还可以执行以下操作(此处使用ksh93
orbash
语法):
unset -v file width height
file=(./*-example99.jpg)
eval "$(identify -format 'width+=(%w) height+=(%h)\n' "${file[@]}")"
for ((i = 0; i < ${#file[@]}; i++)); do
printf 'File: %s (%s x %s)\n' "${file[i]}" "${width[i]}" "${height[i]}"
done
(或for i in "${!file[@]}"; do...
循环遍历$file
数组的键)。
假设identify
可以识别所有文件的宽度和高度,并且您不会对可以包含多个图像(例如动画gif
)的文件类型使用该方法。
答案3
简单的find
+identify
方法:
find . -maxdepth 1 -type f -name "*-example99.jpg" -exec identify -format "%w, %h\n" {} \;
输出示例:
640, 480