2010-03-12 19 views
8

Estoy tratando de obtener el contenido de un directorio mediante secuencias de comandos shell.leer el contenido de un directorio utilizando script de shell

Mi guión es:

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

Sin embargo, mi directorio actual contiene muchos archivos con espacios en blanco en sus nombres. En ese caso, este script falla.

¿Cuál es la forma correcta de bucle sobre el contenido de un directorio de secuencias de comandos shell?

PS: Yo uso bash.

+0

pregunta muy relacionada: http://stackoverflow.com/questions/2437452 – jrharshath

Respuesta

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

1 por ser correcto y rápido que yo! :-P – Buggabill

+0

Tal vez debería usar 'para entrar en *. *'? –

+0

@ Jonathan: Si usted necesita para que coincida con los archivos a partir de una '.' entonces es mejor haciendo girar la opción' dotglob'. –

3

no analiza el contenido del directorio usando ls en un bucle for. se encontrará con problemas de espacio en blanco. utilizar el desarrollo del forro lugar

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

actualizó la pregunta .. – jrharshath

+0

esa es la sintaxis de bash. pruébalo y mira. recuerda las comillas dobles alrededor de las variables. Esto preservará espacios en blanco. Simplemente no use 'ls' en' for loop' – ghostdog74

Cuestiones relacionadas