139 votes

Itération sur chaque ligne de sortie ls -l

Je tiens à répéter sur chaque ligne de la sortie de ls -l /certains/dir/* Droit maintenant, je vais essayer: for x in $(ls -l $1); do echo $x done, cependant ce itère sur chaque élément de la ligne séparément, donc je me

-r--r-----
1
ivanevf
fra
1074
Apr
22
13:07
Fichier1

-r--r-----
1
ivanevf
fra
1074
Apr
22
13:17
Fichier2

Je tiens à répéter sur chaque ligne comme un ensemble, cependant.

Comment dois-je faire?

Merci.

276voto

Randy Proctor Points 2331

Définissez IFS sur newline, 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 utiliser pendant | lire à la place:

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

7voto

ire_and_curses Points 32802
#!/bin/bash

for x in "$(ls -l $1)"; do 
   echo "$x"
done

7voto

Adam Points 2333

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.

2voto

Jamais jamais jamais itérer sur la sortie de ls . Obtenez la liste des fichiers avec un glob, puis utilisez stat pour examiner les propriétés de chaque fichier.

1voto

Steve Emmerson Points 4161

L'utilitaire read (1) ainsi que la redirection de sortie de la commande ls (1) feront ce que vous voulez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X