3

私は次のようなことをしたいと思います

find ./ -type f | parallel --gnu convert "{}" "$(basename "{}" pdf)jpg"

しかし、それは機能しません (ファイルの名前が に変更されますfilename.pdfjpg)。問題は、サブプロセスがすぐに実行されることだと思います(を呼び出す前であってもparallel)。ファイルごとにサブプロセスを実行したいと思います。

私ができる複数のコマンドを備えた find -exec に感謝します:

find *.pdf -exec sh -c 'convert "$1" "$(basename "$1" pdf)png"' _ {} \;

しかし、私は使用したいと思いますGNU parallel。以下は機能しません。

find ./ -type f | parallel --gnu sh -c 'convert "$1" "$(basename "$1" pdf)jpg"' _ {}

もちろん、2 つのコマンド (例: を使用rename) でこれを行うことができますが、1 つと を使用して行う方法を学びたいと思いますGNU parallel

4

1 に答える 1

4

すべてのファイルに.pdf拡張子がある場合は、GNU parallel の拡張子除去構文を使用できます。

find ./ -type f | parallel --gnu convert {} {.}.jpg

({} を引用する必要はありません。parallel が自動的に行います。)

それ以外の場合は、次を使用する必要がありますbash -c

find ./ -type f | parallel --gnu bash -c 'convert "$1" "${1/%.pdf}.jpg"' bash {}

( 2 番目の引数は、実際にはコマンド文字列の後の 2 番目の引数でbashあるため、そこにあります。値は実際には重要ではないため、多くの人が を使用することを好みます。)$1_

于 2013-08-15T05:36:07.623 に答える