【发布时间】:2011-02-25 14:46:24
【问题描述】:
如果我想检查单个文件是否存在,我可以使用test -e filename 或[ -e filename ] 进行测试。
假设我有一个 glob,我想知道是否存在名称与 glob 匹配的文件。 glob 可以匹配 0 个文件(在这种情况下我不需要做任何事情),或者它可以匹配 1 个或多个文件(在这种情况下我需要做一些事情)。如何测试 glob 是否有匹配项? (我不在乎有多少匹配项,如果我可以使用一个 if 语句并且没有循环来做到这一点,那将是最好的(因为我发现它最易读)。
(如果 glob 匹配多个文件,test -e glob* 将失败。)
【问题讨论】:
-
我怀疑我下面的回答是“明显正确的”,在某种程度上,所有其他人都在胡扯。这是一个一直存在的单行 shell-builtin,似乎是“这项特定工作的预期工具”。我担心用户会在这里错误地引用接受的答案。任何人请随时纠正我,我会在这里撤回我的评论,我很高兴犯错并从中吸取教训。如果差异没有显得那么大,我不会提出这个问题。
-
我最喜欢的这个问题的解决方案是the find command,它可以在任何shell(甚至非Bourne shell)中工作,但需要GNU find,而compgen command显然是一个Bashism。太糟糕了,我不能同时接受这两个答案。
-
注意:此问题自提出以来已被编辑。最初的标题是“测试一个 glob 在 bash 中是否有任何匹配项”。在我发表我的答案后,特定的 shell 'bash' 已从问题中删除。问题标题的编辑使我的答案似乎有误。我希望有人可以修改或至少解决此更改。
-
在此处添加注释,“glob”是“通配符”的同义词,以防人们搜索第二个词。