使用“find”命令搜索 PNG 文件,将输出通过管道传输到 imagemagick 进行批量转换

使用“find”命令搜索 PNG 文件,将输出通过管道传输到 imagemagick 进行批量转换

我有一个目录,里面有数千个图像文件,大部分是 JPG,但也有一些是 PNG。这些文件没有扩展名,只是编号。我需要将它们全部转换为 JPG。

使用寻找我可以获取所有文件及其类型的列表,然后我可以使用 Imagemagick 通过指定它们的类型将 PNG 转换为 JPG:

convert png:10020 jpg:10020.jpg

但我想对所有文件进行批量处理。我如何通过管道输出寻找并将所有 PNG 文件转换为 JPG?

答案1

find . -type f | while read IN; do
  if [ "x$(file -b --mime-type $IN)" = "ximage/png" ]; then
    convert png:$IN jpg:$IN.jpg;
  fi;
done;

参数含义:

  1. .
    在当前目录中查找

  2. -type f
    仅查找文件,而不是目录/套接字/等。

  3. while read IN; do
    将每个文件名放入变量IN并对其运行循环。

  4. if [ "x$(file -b --mime-type $IN)" = "ximage/png" ]; then
    检查文件是否是 PNG...

  5. convert png:$IN jpg:$IN.jpg;
    ...如果是,则转换它。

  6. fi; done;
    我们完了!

这次我已经测试过了,它可以工作,将一个充满 PNG 而不带.png扩展名的目录转换为 JPG。

相关内容