У меня есть это дерево каталогов:
/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:
find /tmp -ipath "*find-test*" -type d
find /tmp -ipath "*one*" -type d
Я хотел бы спросить, как использовать команду find
, чтобы получить желаемый результат, содержащий только родительские пути, соответствующие шаблону.
Мне нужно использовать -ipath
включите, чтобы я мог сопоставлять пути с большим количеством условий, но все же только родительские пути являются желаемым результатом.
Я использую sh и bash.