2011-03-30 50 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" 

神奇的是在%.*部分,從而消除了最後一個點後一切。如果您的文件缺少擴展名,它仍然可以正常工作(只要路徑中的其他位置沒有點)。