代码之家  ›  专栏  ›  技术社区  ›  user3209118

在linux shell命令中替换输出文件扩展名

  •  0
  • user3209118  · 技术社区  · 7 年前

    假设我有一个命令convertImage,它接收一些输入的jpeg,并在同一目录中输出一个新的png:

    convertImage --format png photo.jpg -o photo.png
    

    convertToPng photo.jpg
    

    我目前的解决方案是:

    alias convertToPng "convertImage --format png \!:1 -o \!:1.png"
    

    然而,这将输出文件命名为“photo.jpg.png”,我希望它被命名为“photo.png”。有没有办法先解析文件名,然后将其传递给convertImage可执行文件?

    2 回复  |  直到 7 年前
        1
  •  0
  •   JRG    7 年前

    如果您的输入总是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
    

    我更喜欢 作用 因为它给了你很多灵活性 aliases 你可以做的不仅仅是一句话。

        2
  •  0
  •   G McIntire    7 年前
    echo photo.jpg | awk -F. '{print $1".png"}'
    

    这可以用于以下命令行调用:

    $ convertImage --format png photo.jpg -o `echo photo.jpg | awk -F. '{print $1".png"}'`