我在 64 位 Debian 8.1 VirtualBox 机器上安装了 MediaWiki 1.25.2,并且我希望能够将images/
目录从该安装上传到我的 DropBox。作为一个小气鬼,我试图通过优化其中找到的 PNG 来最小化该图像目录的大小optipng
,这样我就不会得到一个太满的 DropBox,以至于我需要支付更多的存储空间。我的 Wiki 目前有 182 个我上传的 PNG(以及超过一百个其他的缩略图,它们是这些原始 PNG 和我在 Wiki 上的 SVG 的缩略图),因此optipng -o7 <filename>
手动运行这些文件将是非常乏味。
因此我在这里问,如何编写一个 bash 脚本来自动为我执行此操作。现在我知道如何做到这一点的一些难题,就像我知道该find
程序可以在指定位置生成具有指定文件扩展名的文件列表(例如,sudo find . -type f -name "*.png"
从images/
对我来说随意/var/lib/mediawiki/images
列出所有文件的目录运行) PNG),但我不知道如何使用该程序创建一个包含与该目录相关的所有文件名的文本文件(例如,f/f1/Frugalware_Linux_screenshot.png
)。我也不知道如何optipng
优化文本文件中列出的 PNG。
答案1
只需find
在这里使用:
find (...your filters ...) -exec optipng -o7 '{}' +
请注意,+
将尝试使用尽可能多的find
结果作为参数optipng
,这很好,因为该程序接受多个文件作为参数。请注意,+
仅当它是命令的最后一个参数时才有效-exec
。另一种选择
find (...filters...) -exec optipng -o7 '{}' \;
每个结果将执行optipng
一次,因此速度要慢得多。
旁注:{}
infind
代表搜索结果的文件名,-exec
将允许执行命令。
答案2
尝试:
for i in `find . -type f -name "*.png"`
do
optipng -o7 "$i"
done
没有测试它,但它应该像那样工作。如果您需要测试它,那么您可以更改该行optipng -o7 $i
以echo $i
查看是否获得正确的文件。