如何递归地自动将给定目录中的所有 bmp 图像转换为 png 文件?

如何递归地自动将给定目录中的所有 bmp 图像转换为 png 文件?

我的机器上有一个目录,里面有 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

相关内容