![使用“not”运算符进行 find 无法按预期工作](https://linux22.com/image/1167585/%E4%BD%BF%E7%94%A8%E2%80%9Cnot%E2%80%9D%E8%BF%90%E7%AE%97%E7%AC%A6%E8%BF%9B%E8%A1%8C%20find%20%E6%97%A0%E6%B3%95%E6%8C%89%E9%A2%84%E6%9C%9F%E5%B7%A5%E4%BD%9C.png)
我有一个目录“X”,其中有一个名为“lib”的子目录,以及其他文件和目录。这个“lib”子目录本身又有一堆目录和文件。我试图使用它来find
获取目录 X 中除与“lib”相关的内容之外的所有内容的路径名。
因此,我尝试这样做:
find -not -name "lib*"
./lib
这将从输出中排除路径,但将包括 lib 目录本身中的所有内容,即lib/*
。我也尝试过:
find -not -name "lib/*"
但这给了我同样的结果
PS:我也试过了,find -not -name lib*
但结果还是一样
答案1
选项仅-name
查看find
单个文件名,而不是文件的完整路径。如果要匹配完整路径,则需要该-path
选项。
我创建的快速测试树中的一些示例:
$ find .
.
./b
./a
./lib
./lib/la
./lib/lb
您正在执行的操作-name
(跳过lib
自身,但不会跳过其中的文件,lib
因为它仅查看单个文件名):
$ find . -not -name 'lib*'
.
./b
./a
./lib/la
./lib/lb
你可能想要的是:
$ find . -not -path './lib*'
.
./b
./a
请注意,因为-path
看着满的./
路径,现在我还需要添加初始前缀。