[英]Replace output file extension in linux shell command
假設我有一個命令convertImage,它需要一些輸入jpeg,並在同一目錄中吐出一個新的png:
convertImage --format png photo.jpg -o photo.png
我想做一個別名“ convertToPng”,它只需要一個arg,即文件:
convertToPng photo.jpg
我當前的解決方案是這樣的:
alias convertToPng "convertImage --format png \!:1 -o \!:1.png"
但是,這會將輸出文件命名為“ photo.jpg.png”,我希望將其命名為“ photo.png”。 有什么辦法可以先解析文件名,然后將其傳遞給convertImage可執行文件?
如果您的輸入始終為jpg,則
convertToPng photo
alias convertToPng "convertImage --format png \!:1.jpg -o \!:1.png"
或將擴展名作為第二個參數
convertToPng photo jpg
alias convertToPng "convertImage --format png \!:1.\!:2 -o \!:1.png"
或最后一個選擇
convertToPng photo.jpg
alias convertToPng "convertImage --format png \!:1 -o `echo $1 | cut -f1 -d'.'`.png"
或在您的.bashrc
編寫一個函數,如下所示
function convert()
{
convertImage --format png $1 -o `echo $1 | cut -f1 -d'.'`.png;
}
並執行上述function
convert photo.jpg
我更喜歡function
方式,因為它給您提供了比aliases
更大的靈活性,並且您不僅可以執行一條語句,還可以執行更多操作。
echo photo.jpg | awk -F. '{print $1".png"}'
可以在命令行調用中使用它,如下所示:
$ convertImage --format png photo.jpg -o `echo photo.jpg | awk -F. '{print $1".png"}'`
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.