Lister les fichiers dans un répertoire : pb des espaces

Résolu/Fermé
gacki Messages postés 109 Date d'inscription mardi 23 avril 2013 Statut Membre Dernière intervention 15 mars 2016 - Modifié par mamiemando le 2/05/2013 à 11:11
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 - 3 mai 2013 à 08:03
Bonjour,

Dans le script suivant je veux qu'il m'affiche le nombre de fichiers existant dans le répertoire courant en utilisant la boucle FOR. Mais le problème est soit que FOR découpe les fichiers avec espace et utilise chaque mot comme un fichier.

J'ai essayé de résoudre ce problème avec un test sur l'existence du fichier mais maintenant il est en train de me donner un nombre de fichiers inférieur au nombre donné par la commande :

ls -al | wc -l 


Le script est :

#!/bin/bash     

i=1     
for ligne in $(ls -a)     
do     
  if [ -e $ligne ]     
  then     
    let i=i+1     
  fi     
done     
echo "le nombre est $i" 


Pourriez-vous me dire où est le problème et pourquoi ? et merci d'avance ;-)
A voir également:

2 réponses

mamiemando Messages postés 33077 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 avril 2024 7 748
2 mai 2013 à 11:09
C'est simplement que ta boucle est mal écrite. Par exemple pour écrire les fichiers (dont les noms comportent éventuellement des espaces) situés dans /home/toto

#!/bin/sh
ls -1 /home/toto | while read filename
do
    echo $filename
done


Bonne chance
2
gacki Messages postés 109 Date d'inscription mardi 23 avril 2013 Statut Membre Dernière intervention 15 mars 2016
2 mai 2013 à 20:18
mais est ce que il y a une solution en utilisant FOR ???
0
mamiemando Messages postés 33077 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 avril 2024 7 748
2 mai 2013 à 20:50
Pas que je sache pour résoudre ton problème. Peut-être en bidouillant IFS, mais c'est vraiment faire compliqué quand on peut faire simple...
https://stackoverflow.com/questions/7039130/iterate-over-a-list-of-files-with-spaces

Bonne chance
0
gacki Messages postés 109 Date d'inscription mardi 23 avril 2013 Statut Membre Dernière intervention 15 mars 2016
2 mai 2013 à 21:11
merci ... mamiemando ;)
0
mamiemando Messages postés 33077 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 avril 2024 7 748
2 mai 2013 à 21:36
Je t'en prie, bonne continuation ;-)
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
3 mai 2013 à 08:03
hello
on peut utiliser for mais sans commande entre $(..), ex:
 $ ls -a1
.
..
.d
.e e
a
b b
c c c
$ i=0; for f in * .* ; do echo $f; ((i++)); done; echo total $i
a
b b
c c c
.
..
.d
.e e
total 7
$ 
0