在bash中从输入文件生成输出文件名

时间:2011-03-30 07:21:05

标签: bash command-line

我有一个bash脚本:

#!/bin/bash
convert "$1" -resize 50% "$2"

在运行脚本时,我想提及源(或输入文件名)而不是传递两个参数,输出文件名应该从源文件名自动生成。这样的事情"$1" | cut -d'.' -f1".jpg"。如果输入文件名为myimage.png,则输出名称应为myimage.jpg.jpg应附加到源文件名的第一部分。如果参数是:*.png,它也应该有效。那么如何修改我的脚本呢?

3 个答案:

答案 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"