2009-11-14 8 views
2

J'essaie de parcourir chaque fichier dans un répertoire. Voici mon code jusqu'à présent.linux parcourir les fichiers dans le répertoire

while read inputline 
do 
    input="$inputline" 
    echo "you entered $input"; 

if [ -d "${input}" ] 
    then 
    echo "Good Job, it's a directory!" 

    for d in $input 
     do 
     echo "This is $d in directory." 
     done 
    exit 

ma sortie est toujours une seule ligne

this is $input directory. 

pourquoi pas ce code fonctionne? Qu'est-ce que je fais mal?

Cool. Quand je fais écho il imprime

$input/file 

Pourquoi fait-il cela? Ne devrait-il pas imprimer le fichier sans le préfixe du répertoire?

+1

'coquilles dérivés de csh' ont une syntaxe significativement différente ('foreach') que celles dérivées du shell Bourne (' for'), il est donc utile de marquer la question avec celle que vous voulez dire ... – dmckee

+0

Quel est votre cas d'utilisation? Si non, vous pouvez aussi bien utiliser find -type d. – ghostdog74

Répondre

6
for d in "$input"/* 
+0

Pourquoi ajouter une double citation "autour de $ input, y at-il une bonne raison de le faire?" J'ai découvert "pour d dans $ input/*" fonctionne aussi Merci –

+1

Si $ input a des espaces etc, vous devez citer. – pixelbeat

3

Si vous voulez simplifier un peu et de se débarrasser du contrôle de répertoire, vous pouvez simplement écrire travailler sur des fichiers et des répertoires, peut-être quelque chose comme:

read inputline 
ls "$inputline" | while read f; do 
    echo Found "$f" 
done 
Questions connexes