我想按宽高比对图像进行排序,然后使用多用途乘用车浏览它们,我从谷歌得到了一些代码:
identify * | gawk '{split($3,sizes,"x"); print $1,sizes[1]/sizes[2]}' | sed 's/\[.\]//' | sort -gk 2
这是一个输出:
28.webp 0.698404
1.webp 0.699544
27.webp 0.706956
10.webp 0.707061
25.webp 0.707061
9.webp 0.707061
2.webp 0.707241
22.webp 1.41431
23.webp 1.41431
24.webp 1.41431
然后我做了一些调整以满足我的需要:
identify * | gawk '{split($3,sizes,"x"); print $1,sizes[1]/sizes[2]}' | sed 's/\[.\]//' | sort -gk 2 | gawk '{print $1}' | mpv --no-resume-playback --really-quiet --playlist=-
它有效,但并不完美。它无法处理带空格的文件名,而且identify
速度太慢,exiftool
尤其是在处理 WebP 格式时,此外,它exiftool
有一个-r
选项,所以我想用exiftool
它来获取此输出,但我不知道如何处理exiftool -r -s -ImageSize
,任何人都可以帮助我吗?
答案1
我不知道mpv
,但在zsh
shell 中,要根据某些标准(例如宽高比)对文件列表进行排序,您可以使用o+function
glob 限定符根据 . 返回的信息来排序 glob 扩展function
。
例如:
by_aspect_ratio() REPLY=$(
exiftool -q -if 'printf "%d", $ImageWidth*1e8/$ImageHeight;0' -- $REPLY
)
print -rC1 -- *.webp(no+by_aspect_ratio)
将按纵横比排序的文件print
列表(列上的 aw )。webp
r
1
C
您可能想使用:
your-image-viewer -- *.webp(no+by_aspect_ratio)
将排序后的文件列表传递到您最喜欢的图像查看器。
替换*.webp
为以递归方式**/*.webp
查找webp
文件。
或者使用任何 shell,但假设使用 GNU 实用程序,并根据问题的最新编辑使用exiftool
's :-r
exiftool -r -ext webp -q -if '
printf "%g\t%s\0", $ImageWidth/$ImageHeight, "$directory/$filename";0' . |
sort -zn |
cut -zf2- |
xargs -r0 your-image-viewer