Como pesquiso em todos os subdiretórios para encontrar um com um determinado nome?

12

Digamos que eu tenha um diretório de nível superior chamado /dire muitos subdiretórios. Como pesquiso os subdiretórios de /dirpara encontrar o chamado x/x/dir/x/x/x/target?

Essa pergunta é semelhante, mas não exatamente o que estou procurando: comando find para determinados subdiretórios .

Não estou procurando arquivos, apenas diretórios com um nome específico.

bernie2436
fonte

Respostas:

17

Tente find /dir -type d -name "your_dir_name".

Substitua /dirpelo nome do diretório e substitua "your_dir_name"pelo nome que você está procurando.

-type ddirá findpara procurar apenas diretórios.

Vinz
fonte
1

Para uma solução mais geral de encontrar um ou mais diretórios e pesquisá-los por algo como encontrar endereços de email antigos em repositórios git, observe o seguinte padrão:

find . -type d -name .git -print0|\
    xargs -0r -I {} find {} -type f -print0 |\
    xargs -0r grep -e '[email protected]'
hildred
fonte
1
echo **/target

ou para obter uma correspondência por linha:

printf %s\\n **/target

Isso funciona imediatamente no zsh. No bash, você precisa executar shopt -s globstarprimeiro, e lembre-se de que isso também percorre links simbólicos para diretórios. No ksh93, você precisa executar set -o globstarprimeiro.

Se você deseja corresponder apenas diretórios ou links simbólicos a diretórios, adicione um final /(ou seja **/target/). No zsh, para combinar apenas diretórios, mas não links simbólicos para diretórios, faça isso **/target(/).

Em qualquer shell, você pode usar o findcomando:

find . -name target

No Linux e Cygwin, o .é opcional. Se você deseja corresponder apenas aos diretórios, adicione -type d.

Gilles 'SO- parar de ser mau'
fonte