所以我的主文件夹中有20个子文件夹,每个子文件夹中有大约200个文件。我一直在尝试编写一个脚本,将每个子文件夹中的每张图片转换为DNG。 我做了一些研究,并能够批量转换当前文件夹中的图像。 我已经尝试开发这个想法,让它适用于子文件夹,但没有成功。 这是我写的代码:
for D in 'find . -type d'; do for i in *.RW2; do sips -s format jpeg $i --out "${i%.*}.jpg"; cd ..; done; done;
答案 0 :(得分:1)
最简单和最快的方法是使用 GNU Parallel ,如下所示:
find . -iname \*rw2 -print0 | parallel -0 sips -s format jpeg --out {.}.jpg {}
因为它会并行使用所有CPU内核。但是在你启动任何未经测试的命令之前,最好使用这样的--dry-run
选项,以便它显示它将要做什么,但实际上没有做任何事情:
find . -iname \*rw2 -print0 | parallel --dry-run -0 sips -s format jpeg --out {.}.jpg {}
示例输出
sips -s format jpeg --out ./sub1/b.jpg ./sub1/b.rw2
sips -s format jpeg --out ./sub1/a.jpg ./sub1/a.RW2
sips -s format jpeg --out ./sub2/b.jpg ./sub2/b.rw2
如果您喜欢它的外观,请移除--dry-run
并再次运行。请注意,-iname
参数表示不敏感大写/小写,因此它适用于“ .RW2”和“ .rw2”。
GNU Parallel 可以通过 homebrew 轻松安装在macOS上:
brew install parallel
它也可以在没有包管理器的情况下安装(如 homebrew ),因为它实际上是一个Perl脚本,而Mac则附带Perl。所以你可以通过在终端中执行此操作来安装:
(wget pi.dk/3 -qO - || curl pi.dk/3/) | bash
您的问题似乎很困惑,您是否需要DNG
文件,如您的标题建议,或JPEG
文件,如您的代码建议。我的代码生成了原样的JPEG。如果您想要DNG
输出,则需要安装 Adobe DNG Converter ,然后运行:
find . -iname \*rw2 -print0 | parallel --dry-run -0 \"/Applications/Adobe DNG Converter.app/Contents/MacOS/Adobe DNG Converter\"
您可以在上述命令的末尾添加一些其他选项:
-e
将嵌入 RW2
DNG
文件
-u
将创建未压缩的DNG
文件-fl
会将快速加载信息添加到DNG
DNG转换器似乎很高兴并行运行多个实例,但我没有测试数千个文件。如果遇到问题,只需更改为parallel -j 1 ...
Adobe DNG Converter 可以使用自制程序在macOS下轻松安装,如下所示:
brew install caskroom/cask/adobe-dng-converter