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

13

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

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

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

bernie2436
источник

Ответы:

18

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

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

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

Vinz
источник
1

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

find . -type d -name .git -print0|\
    xargs -0r -I {} find {} -type f -print0 |\
    xargs -0r grep -e 'my.old@email.address'
hildred
источник
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.

Жиль "ТАК - перестань быть злым"
источник