我想在Linux(Mint 17)命令行的文件夹中进行批量转换和调整某些图像的大小,所以我正在使用:
for $file in *.jpg; do convert -resize 25% $file $file.png; done
但这给我留下了一堆文件,如:
image1.jpg.png
photo4.jpg.png
picture7.jpg.png
...
有没有一种方法可以轻松地从文件名中剪切文件扩展名,以便它只有.png
而不是前面的.jpg
?
或者,更好的是,我可以包含一个计数器,以便我可以运行这样的命令:
for $file in *.jpg using $count; do convert -resize 25% $file image$count.png; done
所以我最终得到了类似的东西:
image1.png
image2.png
image3.png
image4.png
...
我宁愿不必担心创建批处理脚本,所以如果这太难了并且有一种简单的方法可以只删除.jpg
内联,那么我很满意该..
谢谢!
修改
我认为这个问题可以成为一个问题,因为它也有一个反制元素。
答案 0 :(得分:2)
for file in *.jpg; do convert -resize 25% $file ${file%.*}.png; done
答案 1 :(得分:1)
这样的东西?
i=image1.jpg
echo ${i/.jpg/.png}
image1.png
答案 2 :(得分:1)
$ ls *.jpg
DSCa_.jpg* DSCb_.jpg* DSCc_.jpg*
$ count=0; for file in *.jpg; do (( count++ )); convert -resize 25% "$file" "${file%\.*}$count.png"; done
$ ls *.png
DSCa_1.png DSCb_2.png DSCc_3.png
${file%\.*}
使用参数替换从$file
右侧删除最短匹配字符串。您可以阅读有关参数替换here
答案 3 :(得分:1)
此外,您可以使用命令 basename (从文件名中删除后缀):
for file in *.jpg; do base=$( basename ${file} .jpg); convert -resize 25% $file ${base}.png; done