此行应该进入每个子目录,将其中的每个图像合并为与子目录同名的 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)