この行は各サブディレクトリに移動し、その中の各画像をサブディレクトリと同じ名前の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ファイルがないディレクトリの場合、エラーが発生しますが、サブシェルを使用しているため、サブシェルのみが終了します。
エラーを回避するには、まず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)