私はシェルスクリプトに慣れていないので、必要なことをしようとしていくつかの問題があります...
すべての* .png画像を '最適化'し、 this を見つけたいので、次のようにbashを作成しました。
#!/bin/bash
pngnq -vf -s1 *.png
rename -nq8.png .png *-nq8*
optipng -o7 *.png
これが何をするかです:
pngnq -vf -s1 *.png
はImage.pngの例の* pngを取り、最適化されたImage-nq8.pngという名前のコピーを作成します。rename -nq8.png .png *-nq8*
makes Image-nq8.pngがImage.pngになるので、以前と同じですが最適化されます(したがって、最適化前と同じフォルダーに格納できます)<=非常に重要です!optipng -o7 *.png
は、コピーを作成せずに、Images.pngに対して別の最適化を行います。しかし、今私は問題があります:
コンソールにすべての行を順番に書き込むと、現在のフォルダーで正常に機能しますが、今では自動的に再帰的に実行する必要があります。私のケースを説明します:
注:私はフォルダをディレクトリとして言う
ImagesFolderという名前のフォルダーがあり、その中に* .pngを含む他のフォルダーがあり、ImagesFolderのすべてのサブフォルダーでこのbashを実行したいのですが、どうすればいいのかわかりません(私はunixで新しくてシェルスクリプトなど)、インターネットで見つけて試したものが機能しないか、完全に混乱していました...
私が持っているものをよりよく理解するには、次のようなものです:
ImagesFolder
|-Folder1
| |- Folder12
| | |-20 images here
| |- Folder13
| | |- 10 images more here
| |- _Folder <- I have some folder names that start with '_'
| |- 5 images here
|-more images and folders and subfoldrs
これは構造体であり、ImagesFolderからスクリプトを実行する必要があります。
私はforとfindで試し、コンソールでスクリプトを呼び出すfindで試しました...ここで見つけたいくつかの例をスタックに適用しましたが、何もしませんでした...この作品は、そのように適用することはできません。この問題で私を助けてくれることを願っています。
どうもありがとうございます!
編集:スクリプトを実行するには、ImageFolderに移動し、コンソールを開いてchmod u+x name_of_my_script
これは、サブフォルダーに実行するのに問題になる可能性がありますか?はいの場合、修正方法を教えてください。
Bashスクリプト:
新しいファイルを作成find_and_rename
そして次の行を追加します。
replace
を含むバージョン
#!/bin/bash
shopt -s globstar
for f in **/*png; do
pngnq -vf -s1 "$f"
# Uncomment the line below for a test run
# rename -v -n 's/^(.*)\-nq8(.*)/$1$2/' "$f"
# Comment the line below out for a test run
rename -v 's/^(.*)\-nq8(.*)/$1$2/' "$f"
optipng -o7 "$f"
done
mv
を含むバージョン
#!/bin/bash
shopt -s globstar
for f in **/*png; do
pngnq -vf -s1 "$f"
# Uncomment the line below for a test run
# echo "$f => ${f//-nq8/}"
# Comment the line below out for a test run
mv "$f" "${f//-nq8/}"
optipng -o7 "$f"
done
ファイルを実行可能にします:
chmod +x find_and_rename
フォルダーImagesFolder
に移動します。
このフォルダーでスクリプトを開始します。
<path_to_script>/find_and_rename
例(pngnq
およびoptipng
なし
$ find . -type f -name "*.png"
./Image-nq8.png
./sub/Image-nq8.png
./Image2-nq8.png
$ ./find_and_rename
Image2-nq8.png renamed as Image2.png
Image-nq8.png renamed as Image.png
sub/Image-nq8.png renamed as sub/Image.png
$ find . -type f -name "*.png"
./Image2.png
./sub/Image.png
./Image.png