如何在基础文件夹的每个子文件夹中 运行 一个 bash
How can I run a bash in every subfolder of a base folder
我想 'optimize' 我所有的 *.png 图像并找到 this 所以我做了 bash 正如它所说的那样:
#!/bin/bash
pngnq -vf -s1 *.png
rename -f 's/-nq8.png$/.png/' *.png
optipng -o7 *.png
这里我有两个问题:
第一个是第二行(重命名)什么都不做...它应该更改所有名为 [name]-nq8.png
的图像,这是 bash 第一行的结果到原来的名字
第二个也是主要的问题是:我有一个名为 ImagesFolder 的文件夹,里面还有其他包含更多 *.png 的文件夹,我想 运行 这个 bash 在 ImagesFolder 的每个子文件夹中,但是我不知道该怎么做(我是 unix 和 shellscripts 等方面的新手)而且我尝试的方法没有用或者一团糟...
为了更好地理解我所拥有的是这样的:
ImagesFolder
|-Folder1
| |- Folder12
| | |-20 images here
| |- Folder13
| | |- 10 images more here
| |- 5 images here
|-more images
我希望脚本从 ImagesFolder运行
非常感谢!
一般来说,当您希望在目录树上递归执行某项操作时要使用的工具是 find
。如果您的脚本名为 foo
、
find /path/of/base/dir -type f -name '*.png' -exec foo {} \;
将在目录树中名称以 .png
.
结尾的每个常规文件上调用脚本
我可能会做的是:
1) 修复脚本,使其在当前目录中使用 args 而不是 globbing:
#!/bin/bash
pngnq -vf -s1 ""
mv "${1%.png}-nq8.png" ""
optipng -o7 ""
2) 测试它是否按预期工作
3) 运行 它与 find
和 xargs
并行(我打赌你有一个多核处理器)
find . -name '*.png' -print0 | xargs -0 -P6 -n1 the_script
脚本也可以内联。但我的主要观点是,如果你在多核上,请使用并行性。它会大大加快速度。
我想 'optimize' 我所有的 *.png 图像并找到 this 所以我做了 bash 正如它所说的那样:
#!/bin/bash
pngnq -vf -s1 *.png
rename -f 's/-nq8.png$/.png/' *.png
optipng -o7 *.png
这里我有两个问题:
第一个是第二行(重命名)什么都不做...它应该更改所有名为 [name]-nq8.png
的图像,这是 bash 第一行的结果到原来的名字
第二个也是主要的问题是:我有一个名为 ImagesFolder 的文件夹,里面还有其他包含更多 *.png 的文件夹,我想 运行 这个 bash 在 ImagesFolder 的每个子文件夹中,但是我不知道该怎么做(我是 unix 和 shellscripts 等方面的新手)而且我尝试的方法没有用或者一团糟...
为了更好地理解我所拥有的是这样的:
ImagesFolder
|-Folder1
| |- Folder12
| | |-20 images here
| |- Folder13
| | |- 10 images more here
| |- 5 images here
|-more images
我希望脚本从 ImagesFolder运行
非常感谢!
一般来说,当您希望在目录树上递归执行某项操作时要使用的工具是 find
。如果您的脚本名为 foo
、
find /path/of/base/dir -type f -name '*.png' -exec foo {} \;
将在目录树中名称以 .png
.
我可能会做的是:
1) 修复脚本,使其在当前目录中使用 args 而不是 globbing:
#!/bin/bash
pngnq -vf -s1 ""
mv "${1%.png}-nq8.png" ""
optipng -o7 ""
2) 测试它是否按预期工作
3) 运行 它与 find
和 xargs
并行(我打赌你有一个多核处理器)
find . -name '*.png' -print0 | xargs -0 -P6 -n1 the_script
脚本也可以内联。但我的主要观点是,如果你在多核上,请使用并行性。它会大大加快速度。