2

最近撮った 2 つのスクリーンショットを 1 つの画像に結合したいと思うことがよくあります。ImageMagick を使用して、1 つのコマンド ラインで xargs (?) を使用して、日付順に並べ替えられた 2 つの最新のファイルをマージしたいと考えています。

これまでのところ、次のものがありますが、ファイル名のスペースを処理するのに問題があります。これを行う方法がわかりません。

ls -t | head -n 2 | sed 's/\n/\x0/' | xargs -0 -n 2 -I images convert images -append -quality 75 combined.jpg
4

3 に答える 3

1

GNU Parallel がインストールされている場合:

ls -t | head -n 2 | parallel -n 2 convert {} -append -quality 75 combined.jpg

スペース、'、"、およびその他の奇妙な文字を適切に処理するように設計されています。

紹介ビデオを見るhttp://pi.dk/1

于 2012-11-23T20:53:28.563 に答える
1

sed コマンドを に変更しsed 's/.*/"&"/'ます。

または、この純粋な bash ソリューションを使用します。パイプラインの sed コマンドを次のコードに置き換えます。

while read x; do echo "'$x'"; done

AND -0xargs からオプションを削除します。

于 2012-11-22T14:04:28.477 に答える
0

編集: 最初は、最新のファイルの順に並べ替える必要があるとは思いませんでした。findを使用して回答を提供しました。

残念ながら、findではファイルを並べ替えることができません。それらを適切にソートするには、いくつかの回避策が必要です。

findを使用してファイルを時間で並べ替える提案は次のとおりです。

find -type f -printf '%T+_%p\n' | sort -r | head -n 2 |  sed 's/[^_]*_//' | tr '\n' '\0' | xargs -0 -n 2 -I images convert images -append -quality 75

注:このコマンドは、ファイル名に「_」またはスペースが含まれている場合でも機能します。

于 2012-11-23T02:40:04.630 に答える