1

所以我的主文件夹中有 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;
4

1 回答 1

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输出,则需要安装Adob​​e DNG Converter,然后运行:

find . -iname \*rw2 -print0 | parallel --dry-run -0 \"/Applications/Adobe DNG Converter.app/Contents/MacOS/Adobe DNG Converter\" 

您可以将其他一些选项附加到上述命令的末尾:

  • -e将原始文件嵌入到RW2DNG
  • -u将创建DNG未压缩的文件
  • -fl快速加载信息添加到DNG

DNG Converter似乎很高兴能够并行运行多个实例,但我没有测试数千个文件。如果遇到问题,一次只运行一项工作,方法是更改​​为parallel -j 1 ...


Adobe DNG Converter在 macOS 下使用homebrew很容易安装,如下所示:

brew install caskroom/cask/adobe-dng-converter
于 2017-12-14T15:28:56.003 回答