2 votes

Utilitaire de type Find pour parcourir l'arborescence des répertoires.

Si je veux trouver un fichier dans un répertoire ou quelque part sous celui-ci, find est un utilitaire très utile. Existe-t-il un utilitaire similaire qui trouve des éléments dans le répertoire actuel ou au-dessus ?

Par exemple, si mon système de fichiers ressemble à ceci :

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

entonces find /proj/foo/bar -name pom.xml me donnera

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

comme sortie. Je cherche une commande qui renverrait

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

(ou l'ordre inverse). Ce que j'ai tendance à faire actuellement est d'écrire un Shell Shell qui fait quelque chose comme .

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

Est-ce que quelque chose comme ça existe ?

Idéalement, je voudrais quelque chose qui fonctionne sur Linux, Mac et Cygwin dans n'importe quel Shell, mais quelque chose qui fonctionne sur un sous-ensemble, ou seulement dans bash est également utile.

0voto

Austin Hemmelgarn Points 7834

Non testé, mais cela devrait le faire en bash (pas sûr pour les autres coquilles) :

#!/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

En tant que script, il devrait accepter les commandes régulières de find syntaxe pour les expressions. Il enregistre le répertoire actuel pour pouvoir revenir en arrière plus tard, puis remonte l'arborescence des répertoires, en ne recherchant que les éléments de ce niveau pour l'expression, jusqu'à atteindre le répertoire racine. Ceci imprimera tous les éléments correspondants dans l'arborescence, vous pourriez facilement ajouter une vérification à l'intérieur de la boucle pour sortir si find est efficace si vous ne voulez que les premières correspondances.

Il pourrait probablement être optimisé un peu, mais j'ai préféré la rapidité et la facilité de compréhension à la vitesse.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X