このコマンドを使用してPNGファイルを処理します。
find . -iname "*png" -print0 | xargs -r0 --max-procs=4 -n1 sh -c 'pngnq -s1 $1 && advpng -z -4 -q ${$1%.*}-nq8.png' -
実際にはうまくいくようですが、処理するすべてのファイルに対しても出力します。
-: 1: -: Bad substitution
私の考えでは、私が何か間違っているようです${$1%.*}
。しかし、よくわかりません。文書によると、末尾のダッシュは意図的なものです。ここadvpng
- 残念ながら、stdin / outputからの内容を処理する方法がないため、全体をパイプで接続することはできません。したがって、ファイル名を使用する必要があります。
このエラーが発生しないように、この問題を解決する方法を知っている人はいますか?
答え1
1つの明らかな問題は、参照が欠落していることです。
... sh -c 'pngnq -s1 "$1" && advpng -z -4 -q "${1%.*}"-nq8.png' -
あなたの家は正しいです。それが${$1%.*}
本当の問題です。$
括弧内の内容は繰り返すべきではありません。
文書には末尾のダッシュは記載されていません。そうですか?名前だけです。
答え2
GNU並列処理を使用する:
find . -iname "*png" -print0 | parallel -0 pngnq -s1 {} '&&' advpng -z -4 -q {.}-nq8.png
GNU Parallelの詳細については、以下で確認できます。http://www.gnu.org/s/parallel/
わずか10秒でGNU Parallelをインストールできます。
wget -O - pi.dk/3 | sh
紹介ビデオを見るhttp://www.youtube.com/playlist?list=PL284C9FF2488BC6D1