使用“not”运算符进行 find 无法按预期工作

使用“not”运算符进行 find 无法按预期工作

我有一个目录“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看着满的./路径,现在我还需要添加初始前缀。

相关内容