2010-10-26 3 views

Répondre

3

vous pouvez essayer

ls -ltrd */ #match directories using -d and the slash "/" 

ou

echo */ 

ou

for dir in */ 
do 
    ... 
done 

Si vous devez le faire récursive, et vous avez Bash 4+

+0

qui est si évident, je me sens un peu stupide ... alors toutes les options à ls autres que le -d sont superflues :) – tobyodavies

+0

ne vous sentez pas mal , je ressens la même chose ... je ne peux pas croire que j'ai raté celui-là! – osirisgothra

0

Je ne pense pas qu'il ya une façon de le faire directement, mais ne pas oublier que vous pouvez utiliser les options de test-d et -f pour déterminer si le nom fait référence à un répertoire ou un fichier.

for a in *; do 
    if [ -d "$a" ]; then 
    echo Directory: $a 
    elif [ -f "$a" ]; then 
    echo File: $a 
    fi 
done 
+0

Malheureusement c'est pire que d'utiliser find - Je peux utiliser find avec xargs pour obtenir une ligne de commande à passer à un autre script au lieu de tester chaque résultat séparément. Je voulais juste une méthode de globbing parce que vous ne pouvez pas utiliser xargs avec les fonctions bash ... – tobyodavies

+0

Je suis surpris que vous pensiez qu'appeler plusieurs nouveaux processus est en quelque sorte meilleur dans cette approche directe. Pourriez-vous expliquer plus sur ce que vous voulez faire dans la question? – Tim

+0

pour clarifier, en utilisant la solution de ghostdog74, je veux appeler une fonction bash 'fooBar * /' si je devais faire 'fooBar' un script que je pourrais trouver. -maxdepth 1 -type d -print0 | xargs -0 fooBar' qui est beaucoup plus facile que de construire un tableau à l'intérieur d'une boucle for – tobyodavies

Questions connexes