tipos tiene script programacion lenguaje español ejemplos comandos linux shell

tiene - shell script linux español



Iteración sobre cada línea de salida ls-l (7)

Como ya se mencionó, awk es la herramienta adecuada para esto. Si no desea utilizar awk, en lugar de analizar la salida de "ls -l" línea por línea, puede recorrer todos los archivos y hacer una "ls -l" para cada archivo individual como este:

for x in * ; do echo `ls -ld $x` ; done

Quiero iterar sobre cada línea en el resultado de ls -l / some / dir / * Ahora estoy intentando: for x in $(ls -l $1); do echo $x done for x in $(ls -l $1); do echo $x done , sin embargo esto itera sobre cada elemento en la línea por separado, así que obtengo

-r - r -----
1
ivanevf
eng
1074
Abr
22
13:07
Archivo1

-r - r -----
1
ivanevf
eng
1074
Abr
22
13:17
File2

Sin embargo, quiero iterar sobre cada línea como un todo.

¿Cómo puedo hacer eso?

Gracias.


Depende de lo que quieras hacer con cada línea. awk es una utilidad útil para este tipo de procesamiento. Ejemplo:

ls -l | awk ''{print $9, $5}''

.. en mi sistema imprime el nombre y el tamaño de cada elemento en el directorio.


Entonces, ¿por qué nadie sugirió simplemente usar opciones que eliminan las partes que no quiere procesar?

En Debian moderno, solo obtiene su archivo con:

ls --format=single-column

Además, no tiene que prestar atención a qué directorio lo está ejecutando si usa el directorio completo:

ls --format=single-column /root/dir/starting/point/to/target/dir/

Este último comando estoy usando lo anterior y obtengo el siguiente resultado:

bot@dev:~/downloaded/Daily# ls --format=single-column /home/bot/downloaded/Daily/*.gz /home/bot/downloaded/Daily/Liq_DailyManifest_V3_US_20141119_IENT1.txt.gz /home/bot/downloaded/Daily/Liq_DailyManifest_V3_US_20141120_IENT1.txt.gz /home/bot/downloaded/Daily/Liq_DailyManifest_V3_US_20141121_IENT1.txt.gz


Establezca IFS en nueva línea, así:

IFS='' '' for x in `ls -l $1`; do echo $x; done

Ponga un subconjunto alrededor si no quiere establecer IFS permanentemente:

(IFS='' '' for x in `ls -l $1`; do echo $x; done)

O use mientras | leer en cambio:

ls -l $1 | while read x; do echo $x; done

Una opción más, que ejecuta while / read en el mismo nivel de shell:

while read x; do echo $x; done << EOF $(ls -l $1) EOF


La utilidad de lectura (1) junto con la redirección de salida del comando ls (1) hará lo que usted desee.


También puedes probar el comando find . Si solo quieres archivos en el directorio actual:

find . -d 1 -prune -ls

Ejecutar un comando en cada uno de ellos?

find . -d 1 -prune -exec echo {} /;

¿Contar líneas, pero solo en archivos?

find . -d 1 -prune -type f -exec wc -l {} /;


#!/bin/bash for x in "$(ls -l $1)"; do echo "$x" done