[英]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.