我试图根据适用于文件路径的表达式查找/提取目录。例如,我使用了以下命令:
find . -type d -links 2
要获取如下所示的目录列表:
./foo/ABC/W
./foo/ABC/X
./foo/ABC/Y
./foo/ABC/Z
./foo/BCD/W
./foo/BCD/X
./foo/BCD/Y
./foo/BCD/Z
./foo/CDE/W
./foo/CDE/X
./foo/CDE/Y
./foo/CDE/Z
./bar/CDE/V
./bar/CDE/Q
./bar/BCD/V
./bar/BCD/Q
./bar/ABC/V
./bar/ABC/Q
我想知道如何获取此列表,并仅提取其中包含“CDE”的文件路径:
./foo/CDE/W
./foo/CDE/X
./foo/CDE/Y
./foo/CDE/Z
./bar/CDE/V
./bar/CDE/Q
这是我到目前为止所尝试过的,当我尝试时它不会输出任何内容:
find . -type d -links 2 -name "CDE" -print
答案1
$ find . -type d -links 2 -path '*CDE*'
./foo/CDE/X
./foo/CDE/Z
./foo/CDE/W
./foo/CDE/Y
./bar/CDE/Q
./bar/CDE/V
或者使用
find . -type d -links 2 -path '*/CDE/*'
如果您知道CDE
是您要查找的路径中间某处的子目录的名称。
答案2
find . -type d -links 2 -name "CDE" -print
匹配目录其基本名称正是CDE
(因为-name CDE
)并且没有子目录(因为-links 2
)。
文件的基本名称就是/
其路径最后一个之后的位。例如, 的基本名称./foo/CDE/W
是W
。由此您可以看到,没有一个目录符合这两个条件。
你在追随
find . -type d -links 2 -path '*/CDE/*'
当前路径名使用模式匹配表示法中描述的模式匹配表示法与模式匹配。
在“模式匹配表示法”中,星号匹配任何字符串。
最后一点,除非或存在,-print
否则默认使用,因此您可以删除它。-ok
-exec