我有一些文件。模式看起来像这样:
FILE_1.TXT
FILE_2.TXT
FILE_3.TXT
现在我有一个循环,我想对这些文件做些什么。出于某种原因(原因对于这个问题并不重要),我必须不通过*.TXT
而是通过FILE_*.TXT
来运行循环 - 文件名中只有一个变化就是数字。 FILE_*.TXT
无效,Bash正在寻找FILE_*.TXT
而不是FILE_1.TXT
等。
我使用的代码如下所示:
for file in FILE_*.TXT
do
# doing some stuff with the files
done
我怎样才能使这个工作?
答案 0 :(得分:4)
从这个循环中获得FILE_*.TXT
的唯一方法是,如果这些文件中没有一个存在:
$ for file in FILE_*.TXT;do echo $file; done
FILE_*.TXT
$ touch FILE_7.TXT
$ for file in FILE_*.TXT;do echo $file; done
FILE_7.TXT
因此,我建议您仔细查看模式并确保存在 这些文件。
答案 1 :(得分:1)
正如paxdiablo已经提到的,你没有任何与该模式相匹配的文件
您可以设置名为nullglob
$ for x in *.doesnotexist; do echo $x; done
*.doesnotexist
$ shopt -s nullglob
$ for x in *.doesnotexist; do echo $x; done
$ (Nothing is printed, the loop does not run.)
答案 2 :(得分:0)
一切正常:
$ ls
FILE_1.TXT FILE_2.TXT FILE_3.TXT
$ for f in FILE_*.TXT
do
echo $f
done
FILE_1.TXT
FILE_2.TXT
FILE_3.TXT
提示: file
是一个现有工具:
$ file
Usage: file [-bchikLlNnprsvz0] [--apple] [--mime-encoding] [--mime-type]
[-e testname] [-F separator] [-f namefile] [-m magicfiles] file ...
file -C [-m magicfiles]
file [--help]
使用其他变量名称,例如f
。