查找不包含目录的目录?

eri*_*kcw 5 linux bash command-line-interface find

我试图弄清楚如何使用 linux“find”命令(或另一个可以完成工作的命令)来返回不包含特定名称的目录的文件路径/目录列表。

~/web/domain1.com/public_html/bar
~/web/domain2.com/public_html/
~/web/domain3.com/public_html/bar
~/web/domain4.com/public_html/
Run Code Online (Sandbox Code Playgroud)

我想要所有不包含名为“bar”的目录(domain2.com 和domain4.com)的路径。知道如何让 find 输出这样的列表吗?

谢谢!

Gor*_*son 2

find ~ -type d '!' -exec test -d '{}/bar' ';' -print
Run Code Online (Sandbox Code Playgroud)

...但这可能不完全是您想要的;对于您给出的示例目录,它将输出:

/path/to/home
/path/to/home/web
/path/to/home/web/domain1.com
/path/to/home/web/domain1.com/public_html/bar
/path/to/home/web/domain2.com
/path/to/home/web/domain2.com/public_html
/path/to/home/web/domain3.com
/path/to/home/web/domain3.com/public_html/bar
/path/to/home/web/domain4.com
/path/to/home/web/domain4.com/public_html
Run Code Online (Sandbox Code Playgroud)

即它列出了不包含“bar”子目录的每个目录,甚至包括“bar”目录本身(除非它们包含自己的 bar 子目录...)。您可能想要添加额外的限制,例如仅列出特定深度的目录:

find ~ -type d -depth 3 '!' -exec test -d '{}/bar' ';' -print
Run Code Online (Sandbox Code Playgroud)

或具有特定名称:

find ~ -type d -name public_html '!' -exec test -d '{}/bar' ';' -print
Run Code Online (Sandbox Code Playgroud)

...两者都打印:

/path/to/home/web/domain2.com/public_html
/path/to/home/web/domain4.com/public_html
Run Code Online (Sandbox Code Playgroud)