160 votes

En bouclant sur `ls`, on obtient bash Shell Shell.

Est-ce que quelqu'un a un modèle Shell Shell pour faire quelque chose avec ls pour une liste de noms de répertoires, puis de boucler sur chacun d'eux et de faire quelque chose ?

J'ai l'intention de faire ls -1d */ pour obtenir la liste des noms de répertoires.

2voto

jetset Points 139

Pourquoi ne pas mettre IFS sur une nouvelle ligne, puis capturer la sortie de ls dans un tableau ? Le fait de définir IFS sur newline devrait résoudre les problèmes liés aux caractères bizarres dans les noms de fichiers ; l'utilisation de ls peut être intéressant car il dispose d'une fonction de tri intégrée.

(Lors des tests, j'ai eu des difficultés à régler l'IFS sur \n mais le paramétrer en newline backspace fonctionne, comme suggéré ailleurs ici) :

Par exemple, (en supposant que l'on souhaite ls modèle de recherche passé dans $1 ):

SAVEIFS=$IFS
IFS=$(echo -en "\n\b")

FILES=($(/bin/ls "$1"))

for AFILE in ${FILES[@]}
do
    ... do something with a file ...
done

IFS=$SAVEIFS

Ceci est particulièrement pratique sous OS X, par exemple, pour capturer une liste de fichiers triés par date de création (du plus ancien au plus récent), la commande ls La commande est ls -t -U -r .

2voto

dılo sürücü Points 111

Boucle while avec la commande ls dans une ligne de commande

ls | while read filename;do echo "file name is $filename"; done

-3voto

Feral Chimp Points 9206

C'est ainsi que je procède, mais il existe probablement des moyens plus efficaces.

ls > filelist.txt

while read filename; do echo filename: "$filename"; done < filelist.txt

-3voto

Biddut Mitra Points 21

C'est très bien :

#!/bin/sh
for i in `ls`
do
   echo `ls -l $i`
done

Voici le résultat :

root@online:/usr/local/httpd/bin # more ~root/rm-in-ls.sh
    #!/bin/sh
    for i in `ls` 
    do
      echo `ls -l $i`
    done

root@online:/usr/local/httpd/bin # /root/rm-in-ls.sh
-rwxr-xr-x 1 root wheel 82516 Jul 3 04:52 ab
-rwxr-xr-x 1 root 40 3431 Jul 3 04:35 apachectl
-rwxr-xr-x 1 root 40 23881 Jul 3 04:35 apxs
-rwxr-xr-x 1 root wheel 21456 Jul 3 04:52 checkgid
-rwxr-xr-x 1 root 40 8931 Jul 3 04:35 dbmmanage
root@online:/usr/local/httpd/bin # 

Raté ! C'est vrai ! !!

HEADS UP ! !!

C'est pas " ' " dans 'ls' ! !! C'est " ` " dans `ls`. L'aiguë pas l'apostrophe. Il y a une différence entre ' et `. J'ai passé une semaine à comprendre ça quand j'étais à l'université (1990).

C'est "`", la touche avec ~ Tilde surtout shift + ~, c'est appelé aigu. wiki

Si vous ne l'avez pas obtenu, alors copiez et collez le script et exécutez-le.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X