GNU/Linux >> Tutoriels Linux >  >> Linux

Itérer sur chaque ligne de la sortie ls -l

Définissez IFS sur nouvelle ligne, comme ceci :

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

Mettez un sous-shell autour si vous ne voulez pas définir IFS de manière permanente :

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

Ou utilisez while | lisez plutôt :

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

Une autre option, qui exécute le while/read au même niveau du shell :

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

Comme déjà mentionné, awk est le bon outil pour cela. Si vous ne voulez pas utiliser awk, au lieu d'analyser la sortie de "ls -l" ligne par ligne, vous pouvez parcourir tous les fichiers et faire un "ls -l" pour chaque fichier individuel comme ceci :

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

Cela dépend de ce que vous voulez faire avec chaque ligne. awk est un utilitaire utile pour ce type de traitement. Exemple :

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

.. sur mon système imprime le nom et la taille de chaque élément du répertoire.


Linux
  1. Comment boucler sur les lignes d'un fichier ?

  2. Compter les caractères de chaque ligne avec Wc ?

  3. Traiter chaque ligne de sortie de `ping` immédiatement dans le pipeline ?

  4. Comment tuer la ligne de commande Chromium sur Ssh ?

  5. Comment analyser chaque ligne d'un fichier texte comme argument d'une commande ?

Lolcat - Un outil de ligne de commande pour produire un arc-en-ciel de couleurs dans un terminal Linux

Script Bash :comment affecter chaque sortie de ligne de commande à des valeurs dans un tableau ?

Ajouter une chaîne de préfixe au début de chaque ligne

Obtenir la première ligne de la sortie d'une commande shell

Pipe/Mix Line In vers Output dans PulseAudio

Une commande pour afficher chaque ligne vers l'avant puis vers l'arrière