Pages : 1
#1 Le 20/02/2022, à 23:20
- nasier
rediriger une sortie awk
Bonjour
Je cherche a écrire un script bash qui me donne le nombre de fichiers dans un repertoire...
J'ai trouvé cela : find <repertoire> -maxdepth 1 -type f | wc -l | awk '{print $1}'
Cela me va bien sauf que, awk me donne le resultat a l'ecran alors que je voudrais le rediriger vers une variable...
Jai l'intuition qu'il me faut modifier le paramerage de awk...mais je ne connais rien a awk !!!
sI qqun a une somution, je l'en remercie par avance
Hors ligne
#2 Le 20/02/2022, à 23:35
- Watael
Re : rediriger une sortie awk
salut,
c'est une mauvaise solution, parce qu'il existe toujours* un
fi
chier
qui f·i· chie·, et qui comptera pour deux, alors qu'il s'agit d'un seul fichier.
étant donné que tu ne souhaites pas descendre dans les sous-répertoire, la seule solution viable est de boucler sur les fichiers du répertoire avec une boucle for (pour faire simple), en y incrémentant un variable de type numérique.
mais ça nécessite de tester chaque fichier pour vérifier que c'est bien un fichier.
une autre solution consiste à traiter la sortie de find <repertoire> -maxdepth 1 -type f -print0 avec une boucle while, mais c'est c'est un peu compliqué, si tu ne sais déjà pas assigner une Substitution de commandes (voir ce terme dans le man bash) à une variable.
--
*ok, presque toujours, mais ça arrive. Ce qui fait que cette solution est mauvaise.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 21/02/2022, à 07:42
- pingouinux
Re : rediriger une sortie awk
Bonjour,
Même dans le cas improbable où les noms de fichiers contiennent des \n, ceci semble marcher :
nombre_fichiers=$(find <repertoire> -maxdepth 1 -type f -printf X | wc -c)
Hors ligne
#4 Le 21/02/2022, à 09:32
- nasier
Re : rediriger une sortie awk
@pingouinux
A quoi sert le -printf X dans ton script ?
J'ai reussi a avoir le resultat cherché en le faisant sauter...
Merci encore pour le tuyau
Hors ligne
#5 Le 21/02/2022, à 09:37
- nasier
Re : rediriger une sortie awk
OOOp's
J'ai aussi modifié wc -c
le script qui va bien est alors
nombre_fichiers=$(find <repertoire> -maxdepth 1 -type f | wc -l)
echo $nombre_fichiers ( pour verifier...)
Hors ligne
#6 Le 21/02/2022, à 09:59
- pingouinux
Re : rediriger une sortie awk
A quoi sert le -printf X dans ton script ?
Un caractère X est imprimé pour chaque fichier trouvé. Il suffit ensuite de compter les caractères.
Ta méthode en #5 marche aussi si aucun nom de fichier ne contient le caractère \n, ce qui est le cas le plus fréquent. Mais comme l'indique Watael en #2, il est préférable de se prémunir contre les mauvaises surprises.
Hors ligne
#7 Le 21/02/2022, à 14:33
- Watael
Re : rediriger une sortie awk
Même dans le cas improbable où les noms de fichiers contiennent des \n, ceci semble marcher :
nombre_fichiers=$(find <repertoire> -maxdepth 1 -type f -printf X | wc -c)
+1
c'est malin.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#8 Le 21/02/2022, à 15:26
- nasier
Re : rediriger une sortie awk
Est ce qu'il existe une commande genre ls ( avec le bon parametre que je ne trouve pas...) pour lire les fichiers 1 a 1
En gros, j'ai un repertoire avec 150 ficihiers dont je ne veux que changer les extensions (remplacer le minuscules par des majuscules...)
Il faut donc que j'analyse chasue fichier 1 par 1 et que je le bricole
Hors ligne
#9 Le 21/02/2022, à 15:45
- Watael
Re : rediriger une sortie awk
Est ce qu'il existe une commande genre ls
autre question, autre sujet, autre discussion.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne