在Linux的某个文件夹中,我有一些*.eps文件,我想将它们转换成*.png格式并保持原来的文件名,例如:ball.eps转换为ball.png。我尝试执行以下命令:
convert *.eps *.png
但结果并不令人满意。为了做到这一点,我需要编写一些简单的脚本,可能是使用Python或Bash,那么我该如何从文件夹中获取文件名,例如在Python中?谢谢。
请使用以下脚本:
#!/bin/bash
for file in *.eps
do
filename=$(basename "$file")
filename=${filename%.*}
convert $file $filename.png
done
希望这对你有用。
for file in *.eps
返回所有扩展名为 .eps 的文件列表filename=$(basename "$file")
返回文件的原始名称filename=${filename%.*}
去掉扩展名 .epsconvert $file $filename.png
将文件转换为 .png 扩展名#!/bin/sh
for file in *.eps; do
gs -dSAFER -dEPSCrop -r300 -sDEVICE=pngalpha -o "${file%.*}.png" "$file"
done
-dSAFER
将Ghostscript置于沙盒模式中,使Postscript代码只能与您在命令行中指定的文件交互。(是的,Postscript是图灵完备的。)-dEPSCrop
要求Ghostscript不要将其填充到可打印页面的大小。(详见详情)-r300
指定了300 DPI。(详见详情)-sDEVICE
是选择输出格式的方法(请参阅手册的设备部分以获取其他选项。)-o
是-dBATCH -dNOPAUSE -sOutputFile=
的简写形式。(详见详情)$(basename "$file")
替换为 ${file##*/}
(删除包括最后一个 /
在内的所有字符)以保持 shell 内置。${${file##*/}%.*}
是有效的。for ...; do
而不是将 do
放在自己的一行上。#!/bin/sh
,你将得到一个更轻量的运行时环境(dash)在基于 Debian 的系统上,并且兼容不默认安装 /bin/bash
的 BSD。编辑: 如果你希望文件名相同,我认为你甚至不需要循环。你可以这样做:
mkdir backup_directory && cp *.eps backup_directory
mogrify -format png *.eps
mogrify
类似于convert
,但它会直接修改文件,因此如果您不想丢失原始文件,需要在执行此操作之前将其备份到其他位置。
使用循环,您可以在bash中执行此操作:
for f in *.eps; do b=$(basename "$f" .eps); convert "$f" "$b".png; done
*
将扩展到您在其中使用它的所有文件列表,这不是您想要的。相反,通过使用循环变量"$f"
,您每次只处理一个文件。basename
,而使用:for f in *.eps; do convert "$f" ${f%eps}png; done
该代码从文件名的末尾删除了 eps
并添加了 png
。