gpt4 book ai didi

linux - bash: ./script.sh: 参数列表太长

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:09:57 24 4
gpt4 key购买 nike

我有下面的脚本,我从带有 ./checkres.sh * 甚至 *.jpg 的图像目录中运行该脚本,但它仅在文件数量较少(少于 100 个左右)时才有效。任何更多,它都会因错误“参数列表太长”而停止,我有 100,000 张图像要处理。

我在网上搜索了几个小时并尝试了数十种不同的更改,使用 while 而不是 for 循环以及对变量的各种其他更改,但似乎没有任何效果。

任何人都可以帮助解决这个谜团,因为我是 bash 脚本的新手并且已经用尽了想法。

#!/bin/bash
for img in "$@"
do

export height=`identify -format %h "$img"`
export width=`identify -format %w "$img"`
let ratio=$width/$height

echo Image "$img" = [ $width x $height ] = $ratio

if [ $ratio == 0 ]
then
echo Portrait 0
convert "$img" -geometry 600x800 -format jpeg -quality 80 "$img"
else
echo Landscape 1
convert "$img" -geometry 800x600 -format jpeg -quality 80 "$img"
fi

最佳答案

您无需更改脚本的任何内容;只需更改您调用它的方式:

find . -maxdepth 1 -name '*.jpg' -exec ./checkres.sh '{}' +

这将只在每次调用时放置尽可能多的文件名,必要时多次运行脚本。


事实上——除非您更改调用约定,否则您不能通过更改脚本的任何内容来修复此错误,因为问题是在 shell 尝试启动它时发生的!

但是,还有另一种解决方法——与其将其定义为外部脚本,不如将其定义为 shell 函数(在您的 ~/.bashrc 或类似文件中),这意味着它不会不需要作为外部命令启动,这意味着所讨论的操作系统限制不适用。

checkres() {
for img; do
...
done
}
checkres *.jpg

...完全在 shell 中执行,对在执行期间可以传递给外部命令的命令行长度有任何限制。

关于linux - bash: ./script.sh: 参数列表太长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28768811/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com