我是shellscript的新手,尝试执行自己需要的操作时遇到了一些问题...
我想“优化”我所有的* .png图像并找到它,所以我按如下方式进行了重击:
#!/bin/bash
pngnq -vf -s1 *.png
rename -nq8.png .png *-nq8*
optipng -o7 *.png
这是做什么的:
pngnq -vf -s1 *.png
以* png ofr为例Image.png并创建了一个名为Image-nq8.png的副本,该副本是经过优化的 rename -nq8.png .png *-nq8*
使Image-nq8.png变为Image.png,因此您具有与以前相同的但经过优化的(因此您可以在文件夹中拥有与优化之前相同的文件夹)<=非常重要! optipng -o7 *.png
在不进行任何复制的情况下对Images.png进行了另一个优化。但是现在我有一个问题:
如果我按顺序在控制台中编写每一行,那么它可以在我所在的文件夹中正常运行,但是现在我需要自动且递归地进行操作。我解释一下我的情况:
注意:我说的是文件夹作为目录
我有一个名为ImagesFolder的文件夹,里面还有其他带有* .png的文件夹,我想在ImagesFolder的每个子文件夹中运行此bash,但我不知道该怎么做(因为我说过,我在Unix和shellscripts等),以及我在互联网上发现并尝试的内容均无效或完全混乱...
为了更好地理解我所拥有的是:
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句