Linux shell列表文件tmp / ** / *和tmp / *之间的区别是什么

时间:2012-05-21 08:52:51

标签: shell unix

我在shell中遇到一个关于文件系统的问题。 tmp/**/*tmp/*之间有什么区别? 我在我的系统中进行了实验, 有这个目录dir2

dir2
     -->dir1
         -->xx2
     -->ff.txt 

我运行ls dir2/*

dir2/ff.txt

 dir2/dir1:
 xx2

然后我运行ls dir2/**/*

dir2/dir1/xx2

所以这意味着**会忽略这个目录(比如忽略dir1), 有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

我认为问题测试中存在格式问题,但我会根据问题标题和示例进行回答。

在路径的任何单个级别上,单个和双星号之间应该没有任何区别。两个表达式都匹配任何名称,除了以点开头的隐藏表达式(可以通过shell选项更改)。所以:

  • tmp/**/*(相当于tmp/*/*)会扩展为tmp中嵌套两层深度的所有名称。第一个星号仅扩展到目录而不扩展到第一级文件,因为它后面跟一个斜杠。
  • tmp/*扩展为嵌套在tmp内一层深处的任何内容。

如果在命令行上给出目录,ls将列出目录的内容。可以通过向-d添加ls选项来覆盖此内容。