2011-03-30 51 views
4

从输入文件生成输出文件名我有一个bash脚本:在bash

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

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

+0

这是否工作在命令行:'convert“* .png”-resize 50%“* .jpg”'?我怀疑在这种情况下你需要一个循环。 – 2011-03-30 12:15:55

回答

4

膨胀${X%pattern}除去$ X的端部的pattern

convert "$1" -resize 50% "${1%.*}.jpg" 

要在多个文件:

for filename ; do 
    convert "$filename" -resize 50% "${filename%.*}.jpg" 
done 

这将遍历每个命令行参数,是for filename in "[email protected]"简写。您无需担心检查参数是否为*.png - shell将为您扩展该参数 - 您将简单地接收扩展的文件名列表。

0
OUTFILE=`echo $1|sed 's/\(.*\)\..*/\1/'`.jpg 
convert "$1" -resize 50% "$OUTFILE" 
+0

考虑使用'$()'而不是反引号 – SiegeX 2011-03-30 09:37:14

2
convert "$1" -resize 50% "${1%.*}.jpg" 

神奇的是在%.*部分,从而消除了最后一个点后一切。如果您的文件缺少扩展名,它仍然可以正常工作(只要路径中的其他位置没有点)。