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 12/09/2010, à 09:44

jymere

nombre d'objets [RESOLU]

Bonjour,

j'apprend l'utilisation des commandes.

là je veux dénombrer le nombre d'objet dans un de mes répertoires avec une seule commande.

pourquoi celle-ci ne fonctionne pas:

ls -a -l > nb_objets | wc -w nb_objets

(je redirige ma sortie vers un fichier "nb_objets" et je lis le nombre de ligne de ce fichier).

mais la commande me renvoie :

0 nb_objets

alors que si je sépare mes commandes d'abord je fais la première puis la deuxième j'en ai 74 (qui est bien le nombre exacts).

où est l'erreur ?

merci

Dernière modification par jymere (Le 12/09/2010, à 11:56)


Il est malpoli d'etre aigri

debian 7.5 - 64 bits - gnome

Hors ligne

#2 Le 12/09/2010, à 10:34

AnsuzPeorth

Re : nombre d'objets [RESOLU]

Bjr,
Si tu veux créer ce fichier et avoir le nombre d'objets en sortie de commande:

ls -a -l | tee nb_objets | wc -w

Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#3 Le 12/09/2010, à 10:38

jymere

Re : nombre d'objets [RESOLU]

ok je redirige ma liste initial avec tee.

merci ça marche (bon j'ai mis wc -l pour avoir mon nb de lignes)

@+

Dernière modification par jymere (Le 12/09/2010, à 10:39)


Il est malpoli d'etre aigri

debian 7.5 - 64 bits - gnome

Hors ligne

#4 Le 12/09/2010, à 10:46

AnsuzPeorth

Re : nombre d'objets [RESOLU]

jymere a écrit :

(bon j'ai mis wc -l pour avoir mon nb de lignes)

J'ai pas cherché, juste recopié ton code ... (totor va me rouspéter big_smile)


Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#5 Le 12/09/2010, à 10:55

chopinhauer

Re : nombre d'objets [RESOLU]

jymere a écrit :

pourquoi celle-ci ne fonctionne pas:

Le caractère '|' crée un tube entre la sortie standard du premier programme et l'entrée standard du deuxième. Les deux programmes sont lancés au même temps. Du coup au moment où 'wc' lit le fichier, celui-ci est encore vide. Si tu veux qu'il soit exécutés un après l'autre, remplace '|' avec ';'.

Tu peux obtenir le nombre de fichiers dans le répertoire courant avec:

ls -A1 | wc -l

Remarque que dans ce cas aucun fichier temporaire n'est pas créé, la sortie du programme ls alimente directement l'entrée de wc. Aussi le nombre qui sort est correct: on ne compte pas les fichiers '.' et '..' (option -A), on n'a pas une ligne d'entête comme dans le format -l, on compte les lignes et pas les mots (il y a des gens qui s'amusent à mettre des espaces dans les noms de fichier).

Edit: Et pour ceux qui s'amusent à mettre des retours à la ligne dans les noms de fichier, il faut ajouter l'option '-q'.

Dernière modification par chopinhauer (Le 12/09/2010, à 11:31)


Pensez à donner un bon titre à vos sujets : cela permettra d'aider d'autres utilisateurs dans votre même situation. Ce n'est pas qu'en donnant des solutions qu'on aide, mais aussi en posant des bonnes questions et… facilement trouvables.

Hors ligne

#6 Le 12/09/2010, à 11:07

jymere

Re : nombre d'objets [RESOLU]

j'apprécie ces explications merci !


Il est malpoli d'etre aigri

debian 7.5 - 64 bits - gnome

Hors ligne

#7 Le 12/09/2010, à 16:42

sputnick

Re : nombre d'objets [RESOLU]

Parser la sortie de ls c'est le mal et pourquoi utiliser un pipe alors qu'un glob suffit ?

wc -l *

On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#8 Le 12/09/2010, à 17:41

ehmicky

Re : nombre d'objets [RESOLU]

sputnick a écrit :

Parser la sortie de ls c'est le mal et pourquoi utiliser un pipe alors qu'un glob suffit ?

wc -l *

Ne marche pas, parce que wc prend un fichier comme argument, wc -l * va imprimer le nombre de lignes de chaque fichier du répertoire courant (et renvoyer une erreur pour les répertoires) plutôt que d'imprimer le nombre de fichiers du répertoire courant.

Ajout pour le :

ls -Al | wc -l

ls doit avoir les permissions de lire et exécuter le répertoire courant
De plus, il faut enlever 1 au résultat, car ls -Al imprime une ligne pour indiquer le nombre de blocs alloués au répertoire courant précédé de "total" en première ligne.

Dernière modification par ehmicky (Le 12/09/2010, à 17:44)


Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?

Hors ligne

#9 Le 12/09/2010, à 17:58

sputnick

Re : nombre d'objets [RESOLU]

Ne marche pas, parce que wc prend un fichier comme argument, wc -l * va imprimer le nombre de lignes de chaque fichier du répertoire courant (et renvoyer une erreur pour les répertoires) plutôt que d'imprimer le nombre de fichiers du répertoire courant.

Ah ok, j'avait lu trop vite ^^ Je pensait qu'il voulait compter le nombre de lignes des fichiers.

Dans ce cas là, je voit deux solutions si on ne veut pas passer par ls :

x=(*); echo ${#x[@]}

printf '%s\n' * | wc -l

Dernière modification par sputnick (Le 12/09/2010, à 17:59)


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#10 Le 12/09/2010, à 18:11

chopinhauer

Re : nombre d'objets [RESOLU]

ehmicky a écrit :

De plus, il faut enlever 1 au résultat, car ls -Al imprime une ligne pour indiquer le nombre de blocs alloués au répertoire courant précédé de "total" en première ligne.

Dans ma solution c'est un 1 (le chiffre), pas l (la lettre), donc le nombre de fichiers est correct. Par contre la police de caractères de ce forum est loin d'être géniale.


Pensez à donner un bon titre à vos sujets : cela permettra d'aider d'autres utilisateurs dans votre même situation. Ce n'est pas qu'en donnant des solutions qu'on aide, mais aussi en posant des bonnes questions et… facilement trouvables.

Hors ligne