Как мне найти все подкаталоги, чтобы найти один с определенным именем?


13

Допустим, у меня есть каталог верхнего уровня /dirи много подкаталогов. Как я могу искать в подкаталогах, /dirчтобы найти тот, который называется x/x/dir/x/x/x/target?

Этот вопрос похож, но не совсем то, что я ищу: найти команду для определенных подкаталогов .

Я не ищу файлы, просто каталоги с определенным именем.

Ответы:


18

Попробуй find /dir -type d -name "your_dir_name".

Замените /dirна имя вашего каталога и замените "your_dir_name"на имя, которое вы ищете.

-type dскажет findискать только каталоги.


1

Для более общего решения поиска одного или нескольких каталогов и поиска в них чего-то вроде поиска старых адресов электронной почты в репозиториях git, посмотрите на следующую схему:

find . -type d -name .git -print0|\
    xargs -0r -I {} find {} -type f -print0 |\
    xargs -0r grep -e 'my.old@email.address'

1
echo **/target

или получить по одному совпадению на строку:

printf %s\\n **/target

Это работает из коробки в Zsh. В bash вам нужно shopt -s globstarсначала запустить и помнить, что это также пересекает символические ссылки на каталоги. В ksh93 сначала нужно запустить set -o globstar.

Если вы хотите сопоставлять только каталоги или символические ссылки на каталоги, добавьте завершающий /(то есть **/target/). В zsh, чтобы соответствовать только каталогам, но не символическим ссылкам на каталоги, сделайте это **/target(/).

В любой оболочке вы можете использовать findкоманду:

find . -name target

В Linux и Cygwin .это необязательно. Если вы хотите сопоставлять только каталоги, добавьте -type d.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.