使用sips批量处理10000张JPG图片时参数列表过长的解决方法
这个问题我碰到过好多次啦——本质是shell对单条命令的参数长度有上限,当你一次性给sips传10000个*.jpg的时候,参数列表直接超了阈值,就会抛出这个错误。给你几个靠谱的解决办法:
解决方法
方法1:用find + xargs批量分组处理
这是处理大量文件最常用的方式,xargs会自动把find找到的文件分成若干组,每组的参数长度都在shell限制内,然后逐个传给sips执行:
find . -maxdepth 1 -name "*.jpg" -type f | xargs -n 50 sips -Z 128
-maxdepth 1:只搜索当前目录的文件,不会递归进子文件夹(如果需要递归处理子目录里的图片,可以去掉这个参数)-name "*.jpg":精准匹配jpg格式文件-n 50:每次给sips传50个文件,你可以根据实际情况调整这个数字(比如改成100也没问题,只要不触发参数过长错误就行)
方法2:用bash循环逐个处理
这个方法更直观,逐个遍历每个jpg文件并处理,完全不会碰到参数长度的问题:
for img in *.jpg; do sips -Z 128 "$img" done
- 一定要用双引号包裹
$img,这样即使文件名里有空格、特殊字符也能正常处理,不会出现意外错误。
额外小贴士
处理前建议先备份一下原始图片,避免意外情况导致文件损坏:
mkdir -p backup && cp *.jpg backup/
内容的提问来源于stack exchange,提问作者Mint.K
相关产品推荐
相关产品推荐

