web-dev-qa-db-ja.com

MediaWiki画像ディレクトリ内のすべてのPNGを自動的に最適化するスクリプトを作成するにはどうすればよいですか?

MediaWiki1.25.2を64ビットのDebian8.1 VirtualBoxマシンにインストールしていて、このインストールからDropBoxにimages/ディレクトリをアップロードできるようにしたいと思います。安いスケートなので、optipngで見つかったPNGを最適化することで、この画像ディレクトリのサイズを最小化しようとしています。そうすれば、DropBoxがいっぱいになって、さらにお金を払う必要がなくなります。ストレージ。私のWikiには現在182個のPNGがアップロードされています(これらの元のPNGとWikiにあるSVGのサムネイルである他の100個をはるかに超えるものもあります)ので、それぞれでoptipng -o7 <filename>を実行します。これらのファイルを手動で作成するのは非常に面倒です。

したがって、私はここで、これを自動的に実行するbashスクリプトをどのように作成するかを尋ねています。 findプログラムが、指定された場所に指定されたファイル拡張子を持つファイルのリストを生成できることを知っているように、これを行う方法のパズルのいくつかの部分を知っています(たとえば、Sudo find . -type f -name "*.png"を実行します私にとってはimages/にある/var/lib/mediawiki/imagesディレクトリにすべてのPNGが一覧表示されます)が、このプログラムを使用して、このディレクトリに関連するすべてのファイル名を含むテキストファイルを作成する方法がわかりません。 (例:f/f1/Frugalware_Linux_screenshot.png)。また、テキストファイルにリストされているPNGを最適化するためにoptipngを取得する方法もわかりません。

4
BH2017

試してみてください:

for i in `find . -type f -name "*.png"`
do
  optipng -o7 "$i"
done

それをテストしませんでしたが、それはそのように動作するはずです。テストする必要がある場合は、行を変更する可能性がありますoptipng -o7 $iecho $i正しいファイルを取得するかどうかを確認します。

3
Marco

ここでfindを使用するだけです:

find (...your filters ...) -exec optipng -o7 '{}' +

+findの結果をできるだけ多くoptipngの引数として使用しようとすることに注意してください。これは、このプログラムが複数のファイルを引数として受け入れるため問題ありません。 +は、それが-execコマンドの最後の引数である場合にのみ機能することに注意してください。代替案

find (...filters...) -exec optipng -o7 '{}' \;

結果ごとに1回optipngを実行するため、処理速度が大幅に低下します。

補足:find{}は、検索結果のファイル名を表します。-execを使用すると、コマンドを実行できます。

4
Fiximan