Linux CLI 查找没有 children 的目录路径 - 结果只有 parent 路径
Linux CLI find dir paths without their children - only parent paths as a result
我有这个目录树:
/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
...
但我只想得到 parent 个目录而没有 children 个目录。期望的结果应该只是这两个 parent 路径:
/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
命令来获得只包含 parent 匹配模式的路径的期望结果。
我需要使用 -ipath
开关,以便我可以匹配具有更多条件的路径,但仍然只有 parent 路径是所需的结果。
我正在使用 sh 和 bash。
使用-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
我有这个目录树:
/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
...
但我只想得到 parent 个目录而没有 children 个目录。期望的结果应该只是这两个 parent 路径:
/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
命令来获得只包含 parent 匹配模式的路径的期望结果。
我需要使用 -ipath
开关,以便我可以匹配具有更多条件的路径,但仍然只有 parent 路径是所需的结果。
我正在使用 sh 和 bash。
使用-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