Automator 或 Applescript 如何旋转文件夹和子文件夹中的 500,000 张图像?

Automator 或 Applescript 如何旋转文件夹和子文件夹中的 500,000 张图像?

我有一个非常具体的问题。

我有 500,000 张图片,存放在 98 个子文件夹中。一些子文件夹包含 25,000 张图片。

是否有任何脚本/自动化工作流程可供我使用?

我试图创建一个工作流程:

  1. 询问 Finder 物品
  2. 获取文件夹内容(对找到的每个子文件夹重复打勾)
  3. 旋转图像

它可以正常工作,但仅限于文件少于 4,096 个的文件夹:我通常会收到以下错误消息:

Rotate images failed - 1 error too many arguments (12019) -- limit is 4096

有什么方法可以增加此限制或创建完全不同的 Apple 脚本?我真的希望有人能帮助我。

答案1

如果你不必使用 Automator 或 AppleScript,只需使用图像魔术师通过 shell 安装 ImageMagick。麦金塔自制, 或者官方发行

为此,我们将调用find。如果您想先查看图像的名称,则在实际上转换它们,在和echo之间插入一个。-execdirconvert

命令如下:

find /some/path/ -type f -iname "*.jpg" -execdir convert {} -rotate 90 rot_{} \;

这将递归地……

  • 搜索/some/path
  • 对于文件
  • 名字*.jpg
  • 称呼convert来自 ImageMagick,将工作路径设置为图像的路径(execdir
  • 旋转它们90度数
  • 将它们保存在rot_+ 原始文件名下

由于findconvert分别调用每个图像,因此实际有多少个文件并不重要。

答案2

您可以简单地使用 sips...

假设文件夹中的每个文件都是图像文件:

set mainFolder to POSIX path of (path to desktop as text) & "My Folder"
do shell script "find " & quoted form of mainFolder & " \\! -name \".*\" -type f -print0 | xargs -0 sips -r 90"

答案3

您可以使用 jpegtran 无损旋转图像。它可以用 来安装brew install libjpeg

IFS=$'\n'
for f in $(find ~/Folder -iname '*.jpg'); do
    /usr/local/bin/jpegtran -rotate 90 "$f" > "$f.temp"
    [[ $? == 0 ]] && mv "$f.temp" "$f" || echo "$f"
done

答案4

另一个选择是。您告诉 Hazel 要检查哪些文件夹(和子文件夹),设置要对其采取行动的文件的标准以及要采取的行动(包括脚本、shell 脚本和工作流),Hazel 会完成剩下的工作。

相关内容