2009-12-17 4 views
0

J'ai écrit (essayé de) ce petit script bash pour la recherche dans une gamme de répertoires.recherche à travers une série de répertoires bash script

#!/bin/bash 
shopt -s nullglob 
for file in [ac]*/blarg 
do 
    echo $file 
    done 

Ce script recherche dans les répertoires commençant par "a" à "c" pour "blarg". Il ne va que d'un niveau profond. Comment puis-je faire défiler tous les répertoires qu'il pourrait rencontrer, et pas seulement la racine des répertoires avec la lettre de départ.

Aussi, cette question est-elle supposée aller ici à stackoverflow ou est-ce que le super utilisateur serait plus approprié?

Merci

+1

Si vous voulez dire en fait 'a' par 'c', votre modèle doit être [ac] ** **, non seulement ** ac [ ] **. –

+0

Merci pour cela, vous avez raison monsieur. – bing

+0

Note: Les réponses données par benjamin button et 1ch1g0 sont correctes et font ce dont j'ai besoin. Mais parce que je ne peux accepter qu'une seule réponse, j'ai dû choisir le bouton benjamin depuis qu'il était le premier. Désolé 1ch1g0 (j'ai modifié votre réponse) – bing

Répondre

2

sur l'EMH de ligne de commande fera votre purpose.so pourquoi aller pour un script?

find ./[ac]*/ -name "blarg" 

si vous avez encore besoin d'un script:

#!/bin/bash 
shopt -s nullglobi 
for file in `find ./[ac]*/ -name "blarg"` 
do 
echo $file 
done 
+0

+1 meilleure réponse que la mienne. –

+0

Il devrait être './ [ac] * /'. Il échoue également si les noms de fichiers ont des espaces. Il devrait être 'trouver ... | pendant la lecture du fichier ... 'ou' pendant la lecture du fichier ... done <<(find ...) ' –

+0

Plus près, mais l'utilisation de' read' échouera quand même avec les chemins d'accès contenant des retours à la ligne. 'find [ac] */-name blarg -print0 | xargs -0 bash -c 'pour le fichier dans "$ @"; faire …; done'' –

0
echo `find blarg` 

Remplacer cette ligne et vous trouverez tous les fichiers sous [ac] * nom blarg.

3

si vous avez Bash 4.0, vous pouvez essayer globstar

Questions connexes