Macos 如何将多个子文件夹中的原始图像批量转换为DNG

Macos 如何将多个子文件夹中的原始图像批量转换为DNG,macos,image,dng,Macos,Image,Dng,因此,我的主文件夹中有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; 最简单

因此,我的主文件夹中有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;
最简单、最快的方法是使用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可通过自制轻松安装在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 Converter似乎很乐意并行运行多个实例,但我没有使用数千个文件进行测试。如果遇到问题,只需更改为
parallel-j1…


Adobe DNG Converter可以使用自制在macOS下轻松安装,如下所示:

brew install caskroom/cask/adobe-dng-converter

如果您当前的问题是无法对某个扩展进行递归glob,那么这里已经给出了答案:这行代码看起来不像Python。