获取文件夹中文件的基本名称

Get basename of files in folder

我想压缩图片文件,写了下面的bash脚本:

for i in *.png; do convert $i -quality 100% $i-comp.jpeg; done;

当我 运行 它时,我得到像 48.png-comp.jpeg 这样的文件名。我只想拥有 48-comp.jpeg,所以基本上删除了文件名的 .png 部分。

我尝试使用这个 ${$i/.png/},它给我一条错误消息。

有什么建议吗?

您可以使用参数扩展去除输出文件名的 png 扩展名:

for i in *.png; do convert $i -quality 100% ${i%.png}-comp.jpeg; done

${$i/.png/} 几乎是正确的,但是 Parameter Expansion.

中不需要第二个 $
#!/bin/bash

for i in *.png; do
  convert "$i" -quality 88% "${i/.png/}-comp.jpeg"
done

注意: ${i%.png}${i/.png/} 更常用于删除文件扩展名,但两者应该产生相同的输出。