2010-03-12 3 views
8

Sto cercando di ottenere il contenuto di una directory usando lo script di shell.legge il contenuto di una directory usando lo script di shell

Il mio script è:

for entry in `ls`; do 
    echo $entry 
done 

Tuttavia, la mia directory corrente contiene molti file con spazi bianchi nei loro nomi. In tal caso, questo script fallisce.

Qual è il modo corretto di eseguire il looping del contenuto di una directory nello script della shell?

PS: io uso bash.

+0

domanda molto relativa: http://stackoverflow.com/questions/2437452 – jrharshath

risposta

12
for entry in * 
do 
    echo "$entry" 
done 
+0

+1 per essere corretto e più veloce di me! :-P – Buggabill

+0

Forse dovresti usare 'per entrare in *. *'? –

+0

@ Jonathan: Se è necessario abbinare i file che iniziano con un '.', allora è meglio sballottare l'opzione' dotglob'. –

3

non analizzare il contenuto della directory utilizzando ls in un ciclo for. incontrerai problemi di spazio bianco. utilizzare l'espansione shell invece

for file in * 
    do 
     if [ -f "$file" ];then 
     echo "$file" 
     fi 
    done 
+0

ha aggiornato la domanda .. – jrharshath

+0

questa è la sintassi di bash. provalo e guarda ricorda le doppie virgolette attorno alle variabili. Ciò manterrà gli spazi bianchi. Non usare 'ls' nel ciclo' for' – ghostdog74