Utilitário de localização para percorrer * a árvore de diretórios *

2

Se eu quiser encontrar um arquivo em um diretório ou em algum lugar abaixo, find é um utilitário muito útil. Existe um utilitário semelhante que encontrará coisas no diretório atual ou acima dele?

Por exemplo, se meu sistema de arquivos tiver esta aparência:

/proj/
   foo/
     pom.xml
     bar/
       pom.xml
       baz/
         pom.xml
   quz/
     pom.xml

então find /proj/foo/bar -name pom.xml me dará

/proj/foo/bar/pom.xml
/proj/foo/bar/baz/pom.xml

como é a saída. Eu estou procurando um comando que retornaria

/proj/foo/bar/pom.xml
/proj/foo/pom.xml

(ou a ordem oposta). O que eu atualmente tendem a fazer é escrever um script de shell que faça algo como

while [[ $dir != / ]]
do
  check stuff
  cd ..
done

Existe algo assim?

Idealmente, gostaria de algo que funcione no Linux, Mac e Cygwin em qualquer shell, mas algo que funcione em um subconjunto, ou apenas em bash , também é útil.

    
por Troy Daniels 14.06.2018 / 17:04

1 resposta

0

Não testado, mas isso deve ser feito em bash (não tenho certeza sobre outros shells):

#!/bin/bash
oldpwd='pwd'
ret=1

while true; do
    find 'pwd' -mindepth 1 -maxdepth 1 $@

    if [ $? -eq 0 ] ; then
        ret=0
    fi

    if [ 'pwd' = '/' ] ; then
        exit $ret
    else
        cd ..
    fi
done

cd $oldpwd

Como um script, ele deve aceitar a sintaxe regular find para expressões. Ele salva o diretório atual para que possa voltar mais tarde e, em seguida, faz um loop na árvore de diretórios, pesquisando apenas itens nesse nível para a expressão, até atingir o diretório raiz. Isso irá imprimir todos os itens correspondentes na árvore, você pode facilmente adicionar um cheque dentro do loop para salvar se find for bem-sucedido se você quiser apenas as primeiras correspondências.

Provavelmente, ele poderia ser otimizado um pouco, mas fui rápido e fácil de entender ao máximo.

    
por 14.06.2018 / 20:50