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

Résolu
gacki Messages postés 109 Date d'inscription   Statut Membre Dernière intervention   -  
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   -
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 33772 Date d'inscription   Statut Modérateur Dernière intervention   7 882
 
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   Statut Membre Dernière intervention  
 
mais est ce que il y a une solution en utilisant FOR ???
0
mamiemando Messages postés 33772 Date d'inscription   Statut Modérateur Dernière intervention   7 882
 
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   Statut Membre Dernière intervention  
 
merci ... mamiemando ;)
0
mamiemando Messages postés 33772 Date d'inscription   Statut Modérateur Dernière intervention   7 882
 
Je t'en prie, bonne continuation ;-)
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
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