我希望这是正确的论坛。
我在使用此命令时遇到麻烦(怀疑它与bash有关,而与程序无关)
montage -verbose -label '%f' -font Helvetica -pointsize 10 -background '#ffffff' -fill 'gray' -auto-orient -tile 8x6 -geometry 200x200+2+2 ./*.bluemap.jpg /media/
问题是它以文件100002.bluemap.jpg开头,而不是最低的数字,即2016.bluemap.jpg
不存在所有数字,例如2016年之后的下一个数字是6438、6685、9879
反正有没有让它正确地完成工作,正确的顺序?
还是我需要创建一些列表或其他内容?
我有点迷路了。
sort
将文件名排序,并将列表读入数组,然后在montage
调用中将其展开。readarray -d '' -t files < <(printf '%s\0' ./*.bluemap.jpg | sort -z -t/ -k2n)
montage -verbose -label '%f' -font Helvetica -pointsize 10 -background '#ffffff' -fill 'gray' -auto-orient -tile 8x6 -geometry 200x200+2+2 "${files[@]}" /media/
参见:
xargs
来流传输文件名参数而不是Bash数组。printf '%s\0' ./*.bluemap.jpg |
sort -z -t/ -k2n |
xargs -i'{}' -0 -n $((2**63-1)) \
montage \
-verbose \
-label '%f' \
-font 'Helvetica' \
-pointsize 10 \
-background '#ffffff' \
-fill 'gray' \
-auto-orient \
-tile 8x6 \
-geometry 200x200+2+2 \
{} \
/media/
xargs -i'{}' -0 -n $((2**63-1))
的分割说明:
-i'{}'
:告诉xargs
用从{}
的流中读取的参数替换stdin
字符串。-0
:输入流中的条目由null
分隔。-n $((2**63-1))
:设置单次调用命令的最大参数数。 (这里2⁶³-1是64位整数的最大值)