Pregunta:
Debería hacer eco solo de los nombres de archivos o directorios con esta construcción:
ls -Al | while read string
do
...
done
ls -Al
salida:
drwxr-xr-x 12 s162103 studs 12 march 28 12:49 personal domain
drwxr-xr-x 2 s162103 studs 3 march 28 22:32 public_html
drwxr-xr-x 7 s162103 studs 8 march 28 13:59 WebApplication1
Por ejemplo, si intento:
ls -Al | while read string
do
echo "$string" | awk '{print $9}
done
luego genera solo archivos y directorios sin espacios. Si el archivo o directorio tiene espacios como "dominio personal", será solo la palabra "personal".
Necesito una solución muy simple. Quizás haya una mejor solución que awk.
Respuesta:
Realmente no debería analizar la salida de ls
. Si se trata de una tarea y debe hacerlo, su profesor no sabe de qué está hablando. ¿Por qué no haces algo como esto?
El bueno…
find ./ -printf "%f\n"
o
for n in *; do printf '%s\n' "$n"; done
…el malo…
Si realmente quieres usar ls
, puedes hacerlo un poco más robusto haciendo algo como esto:
ls -lA | awk -F':[0-9]* ' '/:/{print $2}'
… y lo feo
Si insistir en hacer que el mal, de manera peligrosa y sólo tiene que utilizar un while
de bucle, haga lo siguiente:
ls -Al | while IFS= read -r string; do echo "$string" |
awk -F':[0-9]* ' '/:/{print $2}'; done
En serio, simplemente no lo hagas.