在 linux shell 命令中替换输出文件扩展名
Replace output file extension in linux shell command
假设我有一个命令 convertImage,它接受一些输入 jpeg,并在同一目录中生成一个新的 png:
convertImage --format png photo.jpg -o photo.png
我想创建一个别名 "convertToPng",它只需要一个参数,文件:
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 | cut -f1 -d'.'`.png"
或者在你的.bashrc
中写一个函数如下
function convert()
{
convertImage --format png -o `echo | cut -f1 -d'.'`.png;
}
并在 function
上面执行为
convert photo.jpg
我更喜欢 function
方式,因为它比 aliases
给你更多的灵活性,而且你可以做的不仅仅是一个声明。
echo photo.jpg | awk -F. '{print ".png"}'
这可以像这样在命令行调用中使用:
$ convertImage --format png photo.jpg -o `echo photo.jpg | awk -F. '{print ".png"}'`
假设我有一个命令 convertImage,它接受一些输入 jpeg,并在同一目录中生成一个新的 png:
convertImage --format png photo.jpg -o photo.png
我想创建一个别名 "convertToPng",它只需要一个参数,文件:
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 | cut -f1 -d'.'`.png"
或者在你的.bashrc
中写一个函数如下
function convert()
{
convertImage --format png -o `echo | cut -f1 -d'.'`.png;
}
并在 function
上面执行为
convert photo.jpg
我更喜欢 function
方式,因为它比 aliases
给你更多的灵活性,而且你可以做的不仅仅是一个声明。
echo photo.jpg | awk -F. '{print ".png"}'
这可以像这样在命令行调用中使用:
$ convertImage --format png photo.jpg -o `echo photo.jpg | awk -F. '{print ".png"}'`