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

时间:2016-10-05 19:23:58

标签: bash

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

  1. 列出所有包含扩展名的文件.LOG .txt .MAP .TL9 *
  2. 列出所有没有扩展名的文件。
  3. 我正在尝试这个:

      

    for file in *.{LOG,txt,MAP,TL9*}; do

    我想列出文件,只能以上面的扩展名结尾。 所以,我不想列出一个文件:temp.txt.EXT,因为它不会以上面给出的扩展结束。同样地,我不希望报告temp.TL94.JPG或temp.TL9.JPG。

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

    请帮忙。

3 个答案:

答案 0 :(得分:1)

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

shopt -s nullglob
shopt -s extglob

for file in @(!(*.*)|*.@(csv|LOG|TL9!(*.*))); do
   echo "$file"
done

答案 1 :(得分:1)

使用extglob

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

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

如果未启用,请先启用extglob

shopt -s extglob

答案 2 :(得分:0)

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

#!/bin/bash

files=`find . -type f -regex ".*[\.LOG|\.MAP|\.TL9]" -o ! -name "*.*"`

for file in $files
do
  echo $file
done