1

我有这个目录树:

/tmp/find-test/
├── one
│   ├── abc
│   │   ├── one
│   │   └── two
│   └── def
│       ├── one
│       └── two
└── two
    ├── abc
    │   ├── one
    │   └── two
    └── def
        ├── one
        └── two

和 find-test2 一样

/tmp/find-test2/
├── one
│   ├── abc
│   │   ├── one
│   │   └── two
│   └── def
│       ├── one
│       └── two
└── two
    ├── abc
    │   ├── one
    │   └── two
    └── def
        ├── one
        └── two

如果我发出:

find /tmp -ipath "*find-test*" -type d

我得到:

/tmp/find-test
/tmp/find-test/two
/tmp/find-test/two/def
/tmp/find-test/two/def/two
/tmp/find-test/two/def/one
...
/tmp/find-test2
/tmp/find-test2/two
/tmp/find-test2/two/def
/tmp/find-test2/two/def/two
/tmp/find-test2/two/def/one
...

但我希望因此只有没有孩子的父母目录。期望的结果应该只是这两个父路径:

/tmp/find-test
/tmp/find-test2

同样,如果我发出命令:

find /tmp -ipath "*one*" -type d

我只想得到:

/tmp/find-test/one
/tmp/find-test/two/abc/one
/tmp/find-test/two/def/one
/tmp/find-test2/one
/tmp/find-test2/two/abc/one
/tmp/find-test2/two/def/one

请注意,它没有例如:

/tmp/find-test/one/abc/one

因为它已经被

/tmp/find-test/one

复制目录树的脚本:

mkdir -p /tmp/find-test1/{one,two}/{abc,def}/{one,two}
mkdir -p /tmp/find-test2/{one,two}/{abc,def}/{one,two}

并找到命令:

find /tmp -ipath "*find-test*" -type d
find /tmp -ipath "*one*" -type d

我想问一下如何使用该find命令来获得仅包含与模式匹配的父路径的所需结果。

我需要使用-ipathswitch 以便我可以匹配具有更多条件的路径,但仍然只有父路径是所需的结果。

我正在使用 sh 和 bash。

4

1 回答 1

2

使用-prune. 我使用您的命令复制目录树并使用 发出您的命令-prune,结果是:

$ find 2>&- /tmp -ipath '*find-test*' -type d -prune
/tmp/find-test2
/tmp/find-test1
$ find 2>&- /tmp -ipath '*one*' -type d -prune
/tmp/find-test2/two/def/one
/tmp/find-test2/two/abc/one
/tmp/find-test2/one
/tmp/find-test1/two/def/one
/tmp/find-test1/two/abc/one
/tmp/find-test1/one
于 2020-04-10T23:33:24.340 回答