我有一个bash脚本:
#!/bin/bash
convert "$1" -resize 50% "$2"
在运行脚本时,我想提及源(或输入文件名)而不是传递两个参数,输出文件名应该从源文件名自动生成。这样的事情"$1" | cut -d'.' -f1".jpg"
。如果输入文件名为myimage.png
,则输出名称应为myimage.jpg
。 .jpg
应附加到源文件名的第一部分。如果参数是:*.png
,它也应该有效。那么如何修改我的脚本呢?
答案 0 :(得分:4)
展开${X%pattern}
会移除$ X结尾的pattern
。
convert "$1" -resize 50% "${1%.*}.jpg"
处理多个文件:
for filename ; do
convert "$filename" -resize 50% "${filename%.*}.jpg"
done
这将迭代每个命令行参数,并且是for filename in "$@"
的简写。您不必担心检查参数是否为*.png
- shell将为您扩展 - 您将简单地接收扩展的文件名列表。
答案 1 :(得分:2)
convert "$1" -resize 50% "${1%.*}.jpg"
魔法在%.*
部分,它删除了最后一个点之后的所有。如果您的文件缺少扩展名,它仍然有效(只要您在路径中的其他位置没有点)。
答案 2 :(得分:0)
OUTFILE=`echo $1|sed 's/\(.*\)\..*/\1/'`.jpg
convert "$1" -resize 50% "$OUTFILE"