我想tree
显示子目录中的硬件文件,如下所示:
.
├── exp
│ └── hw
├── src
│ └── hw.cpp2
└── tmp
└── hw.cpp
$ /usr/bin/tree --noreport .
显示所有文件:
.
├── exp
│ ├── hi
│ └── hw
├── src
│ ├── hi.cpp2
│ └── hw.cpp2
├── ssbuild.bash
├── sslogin.bash
└── tmp
├── hi.cpp
└── hw.cpp
/usr/bin/tree --noreport -P *hw .
不带hw
扩展名:
.
├── exp
│ └── hw
├── src
└── tmp
/usr/bin/tree --noreport -P hw* .
产生:
.
├── exp
├── src
└── tmp
版本信息/usr/bin/tree --version
:
tree v2.1.0 © 1996 - 2022 by Steve Baker, Thomas Moore, Francesc Rocher, Florian Sesser, Kyosuke Tokoro
答案1
该tree
实用程序有一个特定的选项 ,-P
用于指定文件名必须匹配才能成为输出一部分的模式。使用的模式类型-P
是 shell 文件名通配模式,因此需要用引号引起来,以避免 shell 在命令行上扩展它。
tree -P 'hw*' .
由于您当前的目录不包含任何名称匹配*hw
(并且由于您使用的 shell 不会抱怨不匹配的通配模式,就像zsh
默认情况下所做的那样,并且就像对其shell 选项集bash
所做的那样),因此该模式是failglob
当您尝试使用它时并没有扩展。但是,该模式仅匹配以下名称结尾在字符串中hw
。然而,我无法解释为什么hw*
在命令行上使用时会得到该输出。
例子:
$ tree .
.
├── exp
│ ├── hi
│ └── hw
├── src
│ ├── hi.cpp2
│ └── hw.cpp2
├── ssbuild.bash
├── sslogin.bash
└── tmp
├── hi.cpp
└── hw.cpp
3 directories, 8 files
$ tree -P 'hw*' .
.
├── exp
│ └── hw
├── src
│ └── hw.cpp2
└── tmp
└── hw.cpp
3 directories, 3 files