bash脚本-迭代目录中无扩展名的文件列表

bash脚本-迭代目录中无扩展名的文件列表,bash,Bash,我想在bash脚本中迭代目录中的所有文件 列出扩展名为.LOG.txt.MAP.TL9的所有文件* 列出所有没有扩展名的文件 我正在尝试: 用于*{LOG,txt,MAP,TL9*}中的文件;执行 我想列出仅以上述扩展名结尾的文件。 因此,我不想列出一个文件:temp.txt.EXT,因为它不以上述给定的扩展名结尾。类似地,我不希望报告temp.TL94.JPG或temp.TL9.JPG 但是在上面的for循环中,如何插入给我文件没有扩展名的检查 请提供帮助。使用extglob,您可以执行以下操

我想在bash脚本中迭代目录中的所有文件

  • 列出扩展名为.LOG.txt.MAP.TL9的所有文件*
  • 列出所有没有扩展名的文件
  • 我正在尝试:

    用于*{LOG,txt,MAP,TL9*}中的文件;执行

    我想列出仅以上述扩展名结尾的文件。 因此,我不想列出一个文件:temp.txt.EXT,因为它不以上述给定的扩展名结尾。类似地,我不希望报告temp.TL94.JPG或temp.TL9.JPG

    但是在上面的for循环中,如何插入给我文件没有扩展名的检查


    请提供帮助。

    使用
    extglob
    ,您可以执行以下操作:

    shopt -s nullglob
    shopt -s extglob
    
    for file in @(!(*.*)|*.@(csv|LOG|TL9!(*.*))); do
       echo "$file"
    done
    

    使用
    extglob

    *.@(LOG|txt|MAP|TL9) !(*.*)
    
    • *。@(LOG | txt | MAP | TL9)
      匹配所有
      .LOG
      txt
      .MAP
      .TL9
      文件

    • !(*.*)
      匹配所有文件,但名称中包含
      的文件除外

    如果未启用,则首先启用extglob:

    shopt -s extglob
    

    您还可以使用
    find
    命令列出扩展名为
    MAP
    LOG
    TL9
    或根本没有任何扩展名的文件

    #!/bin/bash
    
    files=`find . -type f -regex ".*[\.LOG|\.MAP|\.TL9]" -o ! -name "*.*"`
    
    for file in $files
    do
      echo $file
    done
    

    对但我用的是这个。@(LOG | txt | MAP | TL9)!(*)它与我的glob表达式(我之前发布过)完全相同,但分解为两个单独的glob。它向我显示Name.LOG.TMP之类的文件(因为我认为它中间有.LOG)。但我不知道这个文件。我希望所有的文件都以LOG | txt | MAP | TL9*结尾,仅限@anubhavath,这是不正确的。它不会列出
    Name.LOG.TMP
    。它将只列出以
    .LOG
    My bad结尾的文件。我给错了文件名。它向我显示了这个文件名.TL98.JPG,尽管我不想要它,因为它没有以.TL9*@anubhava“@”结尾,在脚本中不起作用。我不得不使用“+”。它向我显示像Name.LOG.TMP这样的文件(因为我认为它中间有.LOG)。但我不知道这个文件。我希望所有文件都以LOG | txt | MAP | TL9*结尾only@PuneetJain为我工作很好。你在参加舞会吗?我的错。我给错了文件名。它向我显示了这个文件名.TL98.JPG,尽管我不希望它以.TL9*@heemayl结尾