imagemagick 无法在子目录中找到文件

imagemagick 无法在子目录中找到文件

此行应该进入每个子目录,将其中的每个图像合并为与子目录同名的 pdf,然后将其移动到父目录

for d in ./*/ ; do (cd "$d" && convert *.jpg(n) "$d.pdf" && mv $d.pdf .); done

这是错误

zsh: no matches found: *.jpg(n)
zsh: no matches found: *.jpg(n)
convert: unable to open image './dir/-0': No such file or directory @ error/blob.c/OpenBlob/3497.

答案1

由于您使用的./*/是 glob,$d因此将包含类似 的内容./dir/,因此您将运行convert *.jpg(n) ./dir/.pdf && mv ./dir/.pdf .。另请注意,这.当前的目录,不是家长(即..)。

在这里你想要类似的东西:

for dir (./*(/)) (convert $dir/*.jpg(n) $dir.pdf)

在这里,我们使用的是(/) 全局限定符选择文件类型目录(-/)(如果您还想包括,请更改为目录的符号链接就像你的*/方法一样)。

对于没有非隐藏 jpg 文件的目录,您将会收到错误,但因为我们使用的是子 shell,所以只会退出子 shell。

如果你想避免错误,你可以首先检查是否有 jpg 文件,例如:

for dir (./*(/)) {
  files=($dir/*.jpg(Nn)) # N for nullglob
  (($#files == 0)) || convert $files $dir.pdf
}

或者使用匿名函数:

for dir (./*(/)) (){(($# == 0)) || convert $* $dir.pdf} $dir/*.jpg(Nn)

相关内容