【问题标题】:Appending a string before file extension in bash script在 bash 脚本中的文件扩展名之前附加一个字符串
【发布时间】:2022-01-28 23:17:28
【问题描述】:

我需要在 bash 脚本中的文件扩展名之前添加一个数字。例如,我想将abc.efg 之类的文件名转换为abc.001.efg。问题是我不知道文件的扩展名是什么(它是脚本的参数之一)。

我一直在寻找最快的方法。

提前致谢,

【问题讨论】:

    标签: bash


    【解决方案1】:

    你可以这样做:

    extension="${file##*.}"                     # get the extension
    filename="${file%.*}"                       # get the filename
    mv "$file" "${filename}001.${extension}"    # rename file by moving it
    

    您可以在Extract filename and extension in bash 的出色回答中查看有关这些命令的更多信息。

    测试

    $ ls hello.*
    hello.doc  hello.txt
    

    让我们重命名这些文件:

    $ for file in hello*; do ext="${file##*.}"; filename="${file%.*}"; mv "$file" "${filename}001.${ext}"; done
    

    大昌...

    $ ls hello*
    hello001.doc  hello001.txt
    

    【讨论】:

    • +1 这是正确的方式,可惜 BASH 不允许您将 2 个操作合二为一。
    • 谢谢 ;) 我们可以尝试一点技巧让它几乎是单行的,但我认为一步一步做会更清楚。
    【解决方案2】:
    sed 's/\.[^.]*$/.001&/'
    

    您可以使用上述单行代码构建您的mv cmd。

    示例:

    kent$  echo "abc.bar.blah.hello.foo"|sed 's/\.[^.]*$/.001&/' 
    abc.bar.blah.hello.001.foo
    

    【讨论】:

      【解决方案3】:

      如果您的文件扩展名在变量 EXT 中,并且您的文件在变量 FILE 中,那么这样的事情应该可以工作

      EXT=ext;FILE=file.ext;echo ${FILE/%$EXT/001.$EXT}
      

      打印出来

      file.001.ext
      

      替换被锚定到字符串的末尾,因此您的扩展名是否出现在文件名中并不重要。更多信息在这里http://tldp.org/LDP/abs/html/string-manipulation.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-16
        • 2017-07-12
        • 2021-06-17
        • 2013-09-17
        • 2020-10-11
        • 2023-01-24
        • 2018-12-04
        • 2011-01-26
        相关资源
        最近更新 更多