如何防止find遍历某些目录,但仍然列出它们?

如何防止find遍历某些目录,但仍然列出它们?

我有以下文件夹结构:

example/
├── bar/
│   ├── 1
│   ├── 2
│   ├── 3
│   ├── 4
│   ├── 5.txt
│   ├── bar.mylib/
│   │   ├── 1
│   │   ├── 2
│   │   ├── 3
│   │   ├── 4
│   │   ├── 5
│   │   ├── 6
│   │   └── foo/
│   │       ├── 1
│   │       ├── 3
│   │       └── 5
│   └── foo.mylib
└── foo/
    ├── 1
    ├── 3
    ├── 5
    └── node_modules/
        ├── 1
        ├── 2
        ├── 3
        ├── 4
        └── 5

5 directories, 23 files

我想构建一个find命令来列出所有文件和目录,但排除特定的目录名称模式,根本不输入这些目录,但仍然在输出中包含目录名称。

预期输出如下:

example/
example/foo/
example/foo/3
example/foo/5
example/foo/1
example/foo/node_modules/
example/bar/
example/bar/5.txt
example/bar/3
example/bar/4
example/bar/1
example/bar/bar.mylib/
example/bar/foo.mylib
example/bar/2

我尝试了以下方法:

find . -type f ! -path '*/*.mylib/*' ! -path '*/node_modules/*'

这样的作品,它似乎进入了那些被忽略的目录。此外,它没有列出被忽略的目录(即example/foo/node_modules/example/bar/bar.mylib/)。

我故意有两个.mylib路径:一个是目录,另一个是文件。我想列出两者,但忽略目录的内容。

我们怎样才能做到这一点find

答案1

策略是修剪所有与您的node_modules或匹配的目录*.mylib(修剪意味着不进入其中)并打印所有其他文件。

find . -print \( -type d \( -name 'node_modules' -o -name '*.mylib' \) -prune \)

咨询查找规格或手册(如果上述任何选项对您来说不熟悉)。

相关内容