我的机器上有一个目录,里面有 100 多张图片。其中大约一半的图片是 bmp 文件,另一半是 png 文件。我需要将所有 bmp 文件转换为 png 文件,但由于数量太多,我不想手动执行此操作。
那么我如何才能递归地并自动地(可能使用脚本)将该目录中的所有 bmp 图像文件转换为 png 图像文件?
我正在运行带有 GNOME 3.18 的 Ubuntu GNOME 15.10。
答案1
for
对于单个目录来说,一个简单的循环可能就足够了:
for i in *.bmp
do
convert $i "${i%.bmp}.png"
done
为了使其真正递归,有几种选择,其中一种方法如下:
find . -name '*.bmp' -type f -exec bash -c 'convert "$0" "${0%.bmp}.png"' {} \;
如果你想多了解一点,你可以指定一个质量水平对于 png 级别,使用以下语法:
-quality value
取值为 1 表示最低质量和最小文件大小,取值为 100 表示最高质量和最大文件大小。默认值约为 92。进一步详情请点击此处...
答案2
我认为 andrew.46 的答案仍然是最好的,因为它是一篇雄辩的在线文章。但是,这里还有另一个选择。唯一的优点是,在要转换的“文件总数”中有一个“当前文件数”,并且它会回显正在转换的文件。不过,您需要在运行之前删除文件名中的任何空格。这将删除空格:find . -name "* *" | rename 's/ /-/g'
#!/bin/bash
cd $(pwd)
bmp_files=$(find . -iname "*.bmp")
total=$(echo "$bmp_files" | wc -l)
num=0
echo "There are $total files to be converted."
for f in $bmp_files
do
((num++))
echo "Converting $f, $num/$total"
convert "$f" "${f%.bmp}.png"
clear
done