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 输出这样的列表吗?
谢谢!
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)