我想在bash脚本中迭代目录中的所有文件。
我正在尝试这个:
for file in *.{LOG,txt,MAP,TL9*}; do
我想列出文件,只能以上面的扩展名结尾。 所以,我不想列出一个文件:temp.txt.EXT,因为它不会以上面给出的扩展结束。同样地,我不希望报告temp.TL94.JPG或temp.TL9.JPG。
但是在上面的for循环中,我如何插入检查,它给我的文件没有扩展?
请帮忙。
答案 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)
匹配所有.LOG
,txt
,.MAP
和.TL9
个文件
!(*.*)
匹配除名称中包含.
的文件以外的所有文件
如果未启用,请先启用extglob
:
shopt -s extglob
答案 2 :(得分:0)
您还可以使用find
命令列出扩展名为MAP
,LOG
,TL9
或根本没有任何扩展名的文件。
#!/bin/bash
files=`find . -type f -regex ".*[\.LOG|\.MAP|\.TL9]" -o ! -name "*.*"`
for file in $files
do
echo $file
done