linux – ¿Cómo generar solo nombres de archivo (con espacios) en ls -Al?

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.

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım