web-dev-qa-db-ja.com

pngcrushを取得して元のファイルを上書きするにはどうすればよいですか?

man pngcrushを読みましたが、PNGファイルを押しつぶして元のファイルに保存する方法はないようです。 PNGに相当するいくつかのフォルダーを圧縮したいので、1つのコマンドですべてを実行すると便利です。

現在、pngcrush -q -d tmp *.pngを実行してから、tmpディレクトリから元のフォルダーにファイルを手動でカットアンドペーストしています。 mvを使用するのが最善の方法かもしれません。より良いアイデアはありますか?

15
DisgruntledGoat

すべてを1行で:

for file in *.png; do pngcrush "$file" "${file%.png}-crushed.png" && mv ${file%.png}-crushed.png" "$file"; done

それを行う必要があります。

(これまでのところ、私自身のテストでは、pngcrushでテストしたpngの半分未満はその後小さくなりました。

17
frabjous

バージョン1.7.22以降、pngcrushには上書きオプションがあります。

試してみる

pngcrush -ow file.png

詳細については、 Changelog を参照してください。

Version 1.7.22  (built with libpng-1.5.6 and zlib-1.2.5)
  Added "-ow" (overwrite) option.  The input file is overwritten and the
    output file is just used temporarily and removed after it is copied
    over the input file..  If you do not specify an output file, "pngout.png"
    is used as the temporary file. Caution: the temporary file must be on
    the same filesystem as the input file.  Contributed by a group of students
    of the University of Paris who were taking the "Understanding of Programs"
    course and wished to gain familiarity with an open-source program.
21
Jan