我有一个非常具体的问题。
我有 500,000 张图片,存放在 98 个子文件夹中。一些子文件夹包含 25,000 张图片。
是否有任何脚本/自动化工作流程可供我使用?
我试图创建一个工作流程:
- 询问 Finder 物品
- 获取文件夹内容(对找到的每个子文件夹重复打勾)
- 旋转图像
它可以正常工作,但仅限于文件少于 4,096 个的文件夹:我通常会收到以下错误消息:
Rotate images failed - 1 error too many arguments (12019) -- limit is 4096
有什么方法可以增加此限制或创建完全不同的 Apple 脚本?我真的希望有人能帮助我。
答案1
如果你不必使用 Automator 或 AppleScript,只需使用图像魔术师通过 shell 安装 ImageMagick。麦金塔,自制, 或者官方发行。
为此,我们将调用find
。如果您想先查看图像的名称,则在实际上转换它们,在和echo
之间插入一个。-execdir
convert
命令如下:
find /some/path/ -type f -iname "*.jpg" -execdir convert {} -rotate 90 rot_{} \;
这将递归地……
- 搜索
/some/path
- 对于文件
- 名字
*.jpg
- 称呼
convert
来自 ImageMagick,将工作路径设置为图像的路径(execdir
) - 旋转它们
90
度数 - 将它们保存在
rot_
+ 原始文件名下
由于find
将convert
分别调用每个图像,因此实际有多少个文件并不重要。
答案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 会完成剩下的工作。