パイプされたコマンド出力を変換したいですか?

パイプされたコマンド出力を変換したいですか?

file(0).jpg には、file(100).jpg 形式のファイルを含むフォルダがあります。

順序は0,1,100,2,20,21,...になるため、ここで変換を直接使用してPDFを生成することはできません。

echo *.jpg(n)正しいファイル順序を指定してください。

パイプラインでどのように変換しますか?

頑張りましたecho *.jpg(n) | convert - out.pdf

答え1

実行するコマンドが次のような場合

convert 'file(0).jpg' 'file(1).jpg' ...etc... 'file(100).jpg' out.pdf

その後、グローブを使用するか、

convert ./*.jpg(n) out.pdf

または、パターンに一致する0..100の範囲のファイルのみを含めます。

convert 'file('<0-100>').jpg'(n) out.pdf

あるいは、中かっこ拡張を使用することもできます。

convert 'file('{0..100}').jpg' out.pdf

しかし、これではありません。ワイルドカードfile(0).jpg、渡された文字列を既存のファイル名かどうかに変換します。file(100).jpg以前のファイルとは異なり、file(012).jpgexampleというファイルも失われます。

答え2

多くのファイルがオペレーティングシステムのコマンドライン制限に達したら、「ファイル名の引用」機能を使用する必要がありますconvert@

generate the list of files ... | convert @- out.pdf

*.jpg(n)glob をサポートしていないシェルでは、zsh次のコマンドを使用して正しい順序でファイルのリストを生成できます。

echo 'file('?').jpg' 'file('??').jpg' 'file('???').jpg' | convert @- out.pdf

または、中かっこ拡張をサポートするシェルを使用してください。

echo 'file('{?,??,???}').jpg' | convert @- out.pdf

これとは異なり、{1..100}存在するファイルのみが一致します。これはほとんどのシェルに組み込まれているため、echoオペレーティングシステムのコマンドラインによって制限されないため、この構成は便利なUUoEに置き換えることができます。

関連情報