Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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. smile


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

nasier #4 a écrit :

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

pingouinux a écrit :

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