如何在查找FOR循环时从名称中删除扩展名

这个问题在这里已经有了答案:

  • 在Bash中提取文件名和扩展名35个答案

  • 要删除扩展名:

    filename_without_ext="${file%.*}"
    

    这意味着,删除以点开头的最短后缀。

    然后检查存档是否存在类似的东西

    if [ -e "$dir/$filename_without_ext.tar.bz2" ]; then
    

    我并不完全知道它如何实现更安全的删除,但是这个东西会做到这一点,如果你想删除扩展,并搜索tar.bz2,但要注意,如果文件名是text.something.txt将结果text.tar操作.bz2

    FILE=test.txt; echo ${FILE/.*/.tar.bz2}
    

    还有其他方法可以使用变量替换来达到相同的结果:

  • ${var%pattern}从右侧删除文本匹配模式后,使用var的值。 删除最短的匹配件。
  • ${var%%pattern}与%pattern相同,但删除最长的匹配部分。
  • ${var/pat/repl}使用var的值,第一次匹配pat与repl重新放置。
  • ${var/pat}使用var的值,第一次匹配pat被删除。
  • 如果你想在rm之前做一些检查,

    alias rm='/usr/bin/rm -rfv'
    
    链接地址: http://www.djcxy.com/p/57101.html

    上一篇: How to remove extensions from name when looking in a FOR loop

    下一篇: Bash: if and typecheck