GNU/Linux >> Znalost Linux >  >> Linux

Iterování přes každý řádek výstupu ls -l

Nastavte IFS na nový řádek takto:

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

Pokud nechcete nastavit IFS natrvalo, dejte kolem něj sub-shell:

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

Nebo použijte při | čtěte místo toho:

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

Ještě jedna možnost, která spustí while/read na stejné úrovni shellu:

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

Jak již bylo zmíněno, awk je k tomu správný nástroj. Pokud nechcete používat awk, můžete místo analýzy výstupu "ls -l" řádek po řádku iterovat všechny soubory a udělat "ls -l" pro každý jednotlivý soubor takto:

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

Záleží, co chcete s každým řádkem dělat. awk je užitečný nástroj pro tento typ zpracování. Příklad:

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

.. na mém systému vytiskne název a velikost každé položky v adresáři.


Linux
  1. Počítání znaků každého řádku s Wc?

  2. Zpracovat každý řádek výstupu z `ping` okamžitě v potrubí?

  3. Jak zabít příkazový řádek Chromium přes Ssh?

  1. Jak analyzovat každý řádek textového souboru jako argument příkazu?

  2. Přidejte předponu na začátek každého řádku

  3. Jaký je význam každého řádku výstupu sestavy C hello world?

  1. Předpona každého výstupu příkazu za běhu

  2. Příkazový řádek:Extrahujte podřetězec z výstupu

  3. Příkaz pro výstup každého řádku dopředu a poté zpět