【问题标题】:resizing a long list of jpg files using sips使用 sip 调整一长串 jpg 文件的大小
【发布时间】:2018-05-04 22:40:03
【问题描述】:

我的文件夹中有 10,000 张图像。我正在尝试将它们调整为 128 x 128。

sips -Z 128 *.jpg

给我这个错误:

-bash: /usr/bin/sips: 参数列表太长

我该如何解决这个问题?

【问题讨论】:

    标签: linux sips


    【解决方案1】:

    您可以尝试在一个简单的 for 循环中执行任务:

    for file in *.jpg; do
     sips -Z 128 "$file"
    done;
    

    单行脚本:

    for file in *.jpg; do sips -Z 128 "$file"; done;
    

    【讨论】:

    • 不,据我所知,bash 每行语句执行一个命令,它将等待 sips 完成以开始下一个命令。换句话说,这将对每个图像执行一次 sips,而问题帖子中的命令尝试一次对所有图像执行 sips。如果我错了,请纠正我
    【解决方案2】:

    假设您在要处理的文件夹中...

    find ./ -name "*jpg" -exec sips -Z 128 {} \;
    

    应该可以工作,并且一个一个地处理它们,而不是一个大的参数列表。

    【讨论】:

      【解决方案3】:

      按照其他答案的建议,分批进行。

      这是第三种选择,与其他选择不同,它允许您并行化任务。此示例一次最多运行 4 个并行批处理,批处理大小为 100:

      find . -name '*.jpg' -print0 | xargs -0 -n 100 -P 4 sips -Z 128
      

      如果您有更快的驱动器和更多内核,则可以增加-P CPU 数量。如果您有更大的图像并且想要更细粒度的批次,您可以减少 -n 批次计数。

      【讨论】:

      • 不知道为什么有人对这里的最佳答案投了反对票。让我投票来弥补它:-)
      猜你喜欢
      • 1970-01-01
      • 2015-03-11
      • 2018-06-19
      • 2021-12-09
      • 1970-01-01
      • 2012-11-15
      • 2010-12-02
      • 2021-07-27
      • 1970-01-01
      相关资源
      最近更新 更多