xargsサブシェルに代替エラーがありますか?

xargsサブシェルに代替エラーがありますか?

このコマンドを使用して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%.*}本当の問題です。$括弧内の内容は繰り返すべきではありません。

文書には末尾のダッシュは記載されていません。そうですか?名前だけです。

おすすめ記事