BASH-文件名中的任何字符替换
我有一些档案。模式如下所示:BASH-文件名中的任何字符替换,bash,Bash,我有一些档案。模式如下所示: FILE_1.TXT FILE_2.TXT FILE_3.TXT for file in FILE_*.TXT do # doing some stuff with the files done 现在我有一个循环,我想对这些文件做些什么。出于某种原因(这个原因对于这个问题并不重要),我必须运行循环,而不是通过*.TXT,而是通过FILE.*.TXT——文件名中只有一件事情在改变,那就是编号文件*.TXT不起作用,Bash正在查找文件*.TXT不查
FILE_1.TXT
FILE_2.TXT
FILE_3.TXT
for file in FILE_*.TXT
do
# doing some stuff with the files
done
现在我有一个循环,我想对这些文件做些什么。出于某种原因(这个原因对于这个问题并不重要),我必须运行循环,而不是通过*.TXT
,而是通过FILE.*.TXT
——文件名中只有一件事情在改变,那就是编号<代码>文件*.TXT不起作用,Bash正在查找文件*.TXT
不查找文件*.1.TXT
等
我使用的代码如下所示:
FILE_1.TXT
FILE_2.TXT
FILE_3.TXT
for file in FILE_*.TXT
do
# doing some stuff with the files
done
我如何才能使其工作?从该循环中获得
文件*.TXT
的唯一方法是,如果这些文件实际上不存在:
因此,我建议您仔细查看这些模式,确保这些文件确实存在。一切正常:
$ 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
Usage: file [-bchikLlNnprsvz0] [--apple] [--mime-encoding] [--mime-type]
[-e testname] [-F separator] [-f namefile] [-m magicfiles] file ...
file -C [-m magicfiles]
file [--help]
使用不同的变量名,例如
f
,正如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.)
也许如果你分享你的代码到目前为止,有人会告诉你你在做什么wrong@MattCoubrough-我已经更新了这个问题,我非常确定
bash
可以区分可执行文件和变量名:-)当然可以。但为了避免混淆,我建议不要对名称进行阴影处理。似乎我犯了一个错误——这些文件是由循环中的其他命令找到的。唯一不能看到真实文件名的命令是,file.*.TXT
不存在-是<代码>标题-标题:“文件*.TXT”无法打开读取:未找到文件或目录