我在shell中遇到一个关于文件系统的问题。
tmp/**/*
和tmp/*
之间有什么区别?
我在我的系统中进行了实验,
有这个目录dir2
dir2
-->dir1
-->xx2
-->ff.txt
我运行ls dir2/*
:
dir2/ff.txt
dir2/dir1:
xx2
然后我运行ls dir2/**/*
:
dir2/dir1/xx2
所以这意味着**
会忽略这个目录(比如忽略dir1),
有人可以帮助我吗?
答案 0 :(得分:0)
我认为问题测试中存在格式问题,但我会根据问题标题和示例进行回答。
在路径的任何单个级别上,单个和双星号之间应该没有任何区别。两个表达式都匹配任何名称,除了以点开头的隐藏表达式(可以通过shell选项更改)。所以:
tmp/**/*
(相当于tmp/*/*
)会扩展为tmp
中嵌套两层深度的所有名称。第一个星号仅扩展到目录而不扩展到第一级文件,因为它后面跟一个斜杠。tmp/*
扩展为嵌套在tmp
内一层深处的任何内容。如果在命令行上给出目录,ls
将列出目录的内容。可以通过向-d
添加ls
选项来覆盖此内容。