在Linux上的某个文件夹中,我有文件* .eps,我想将它们转换为* .png并保留名称,例如:ball.eps to ball.png。我试着这样做:
convert *.eps *.png
但结果并不令人满意。要做到这一点,我需要用Python或bash编写一些简单的脚本,那么如何从文件夹中获取文件名,例如在Python?感谢。
答案 0 :(得分:2)
编辑:如果您希望文件名相同,我甚至不认为您需要循环。你可以这样做:
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
。
答案 1 :(得分:2)
尝试以下脚本:
#!/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%.*}
删除扩展名.eps convert $file $filename.png
将文件转换为.png扩展名答案 2 :(得分:0)
由于我在寻找一种解决方法convert: not authorized
的同时登陆而又不放松整个系统的安全策略,因此我不妨对@ vaibhav-jain的答案进行一些改进。
首先,如果要将EPS光栅化为PNG,以下是跳过ImageMagic并直接转到Ghostscript的方法:
#!/bin/sh
for file in *.eps; do
gs -dSAFER -dEPSCrop -r300 -sDEVICE=pngalpha -o "${file%.*}.png" "$file"
done
-dSAFER
将Ghostscript置于沙盒模式,其中Postscript代码只能与您在命令行上指定的文件进行交互。 (是的,后记is turing-complete。)-dEPSCrop
要求Ghostscript不要将其填充到可打印页面的大小。 (details)-r300
指定300 DPI。 (details)-sDEVICE
是选择输出格式的方式(其他选择请参见手册的Devices section。)-o
是-dBATCH -dNOPAUSE -sOutputFile=
(details)的简写其他更改:
$(basename "$file")
替换为${file##*/}
(直到最后一个/
的带状字符)以坚持使用shell内置。${${file##*/}%.*}
是有效的。for ...; do
而不是将do
放在自己的行上。#!/bin/sh
可以在基于Debian的系统上获得更轻便的运行时环境(dash),并且与不需要的BSD兼容默认情况下安装/bin/bash
。