IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Questions à réaliser en une seule commande


Sujet :

Shell et commandes GNU

  1. #1
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 756
    Par défaut Questions à réaliser en une seule commande
    Bonjour,

    je suis en train de refaire un partiel que j'avais raté

    Et j'aimerais votre aide pour avoir la correction de cet exo.


    1 - Ecrire dans fichier.txt les informations détaillées des fichiers dont les désignations se trouve dans le fichier liste-nom.txt (une désignation par ligne). Si fichier.txt existe déjà son contenu est écrasé.


    2- Afficher le nom du fichier ordinaire ayant la plus grande taille dans le répertoire courant

    3- afficher le nombre d'élément du répertoire courant caché ou non dont le nom contient au moins le caractère point


    4- Expliquer ce que fait la commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep '^ab\{2\}.*\..*c$' abb*.*c
    Je dirais que cela regarde le contenu de tous les fichier commençant par abb et ayant un c en fin d'extention. Il affiche alors le contenu des lignes de ces fichiers commençant par abbb suivi d'une chaîne de caractère quelconque se terminant par la lettre c en fin de ligne.
    Je suis pas sur de ma réponse j'aimerais donc savoir ce que vous en pensez ! Bien entendu vous allez me dire que je n'ai qu'à tester^^Mais en exam on a pas de pc pour tester je préfère donc ne pas céder à la tentation





    En ce qui concerne les questions 1,2,3. Vous allez me dire c'est très facile un petit script qui fait chacun de ces cas c'est vite fait. Et vous avez raison !
    Seulement je dois rajouter la consigne qui casse tout; il faut réaliser ces taches en une seule ligne de commande. Il va donc falloir jouer avec les pipes | et les opérateurs d'indirection en général. Mais là pour le coup c'est pas du tout mon fort et j'aimerais bien avoir une correction fiable ^^


    Merci à vous !

  2. #2
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Bonjour.

    1 - Ecrire dans fichier.txt les informations détaillées des fichiers dont les désignations se trouve dans le fichier liste-nom.txt (une désignation par ligne). Si fichier.txt existe déjà son contenu est écrasé.
    Bon déjà, ils sont gentils, ils ne nous disent pas ce qu'ils entendent par "informations détaillées". Je déteste les spécifications aussi peu précise même si je me doute qu'ils s'attendent à quelque chose du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat liste-nom.txt|xargs ls -l > fichier.txt
    Maintenant, j'ai agis avec la "mentalité" de certains enseignants pour qui "infos détaillées sur un fichier en shell" == ls -l. Il vaut mieux savoir exactement les infos que l'on souhaite stocker et passer par une commande prévue à cet effet : la commande stat.

    Un peu de lecture utile à ce sujet : http://ineumann.developpez.com/tutor...tiques/#LIII-A

    Je rappel ceci :

    1) > va rediriger la sortie cat liste-nom.txt|xargs ls -l dans fichier.txt en écrasant son contenu si le fichier existe déjà (>> ajouterais cette sortie à la fin du fichier s'il existe déjà).
    2) > est un raccourci de 1> avec 1 qui désigne la sortie standard (stdout), il y a d'autres flux comme 2 qui désigne stderr (la sortie d'erreur standard).
    3) xargs va exécuter ls -l sur chaque ligne renvoyées par la commande cat liste-nom.txt.
    4) à la place de ls -l vous pouvez utiliser stat encore une fois comme je l'ai dit précédemment (mais ça suppose de savoir ce que l'on veux précisément comme "informations détaillées").

    Une autre solution pour lire le contenu d'un fichier en Bash sans passer par des commandes superflues :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while read -r; do stat -c "%A" "$REPLY"; done < liste-nom.txt > fichier.txt
    Toutefois, celle-ci ne remplis pas les exigences de votre consigne.

    Cordialement,
    Idriss

  3. #3
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 756
    Par défaut
    Salut et merci pour votre réponse.

    Oui je confirme pendant tout mon premier semestre j'ai toujours utilisé ls -l pour les infos détaillé.

    En revanche, je ne connaissais pas la commande xargs, on ne l'a même jamais évoqué en cours, je pense donc qu'il faut utiliser une autre solution.


    Ce que moi j'aurais tenté de faire (surement à tort):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ls -l `grep '^.*\..*$' liste-nom.txt` > fichier.txt
    ls -l pour les information détaillé et entre backquote je récupère le résultat du grep pour l'utiliser dans mon ls -l

    Je récupère des lignes commençant par une chaine quelconque suivi d'un point et se terminant par une chaine quelconque (donc à priori un nom de fichier que je passe au ls -l)


    2) > est un raccourci de 1> avec 1 qui désigne la sortie standard (stdout), il y a d'autres flux comme 2 qui désigne stderr (la sortie d'erreur standard).
    Voilà quelque chose que l'on ne m'avait jamais expliqué en cours, pour moi il n'y avait que > et 2>
    Maintenant je sais que > est un raccourci de 2> ça apparaît déjà plus logique

  4. #4
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Re bonjour.

    Citation Envoyé par Amnael Voir le message
    Maintenant je sais que > est un raccourci de 2> ça apparaît déjà plus logique
    Non attention, c'est un raccourci de 1> (fin disons que 1 est le canal/flux "par défaut").

    Citation Envoyé par Amnael Voir le message
    Ce que moi j'aurais tenté de faire[...]
    Je ne comprends pas trop l'utilité de grep pour ce cas, à moins que vous ayez d'autres contraintes qui exigent de filtrer certaines lignes du fichier txt contenant le nom des fichiers dont on veut le détail.

    Passons à la suite :

    2- Afficher le nom du fichier ordinaire ayant la plus grande taille dans le répertoire courant
    Si je dois utiliser le moins de commandes possible, j'opterais pour awk :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ls -l|awk '($8 != ""){lst[$5"_"$8]=$8} END {n=asorti(lst, sorted); print lst[sorted[n]]}'
    Attention, vérifier l'ordre des colonnes pour ls -l :
    $5 = la taille
    $8 = le nom du fichier
    Numéros de colonnes à adapter si besoin.

    Moult autres solutions sont possibles, par exemple, un peu plus lourd :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ls -1|xargs -Ifichier stat -c "%s;fichier" fichier|sort -r|head -n1|cut -d";" -f2
    ls -1 : afficher chaque fichier sur une ligne
    stat -c "%s" : afficher la taille en bytes
    sort -r : tri décroissant
    head -n1 : n'afficher que la première ligne
    cut -d ";" -f2 : découpe sur le séparateur ";" et affiche le second élément

    3- afficher le nombre d'élément du répertoire courant caché ou non dont le nom contient au moins le caractère point
    L'option -a va afficher les fichiers cachés.
    L'option -1 pour afficher un seul fichier par ligne.
    grep "\." les noms qui contiennent "." (ça peut être pour l'extension, parce que c'est un fichier caché ou pour d'autres raisons...).
    wc -l compte le nombre de lignes...

    Autre possibilité :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i in *; do [[ $(basename $i) =~ \. ]] && basename $i; done|wc -l
    La première solution me semble davantage conforme aux consignes.

    Citation Envoyé par Amnael Voir le message
    4- Expliquer ce que fait la commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep '^ab\{2\}.*\..*c$' abb*.*c
    Je dirais que cela regarde le contenu de tous les fichiers commençant par abb et ayant un c en fin d'extention. Il affiche alors le contenu des lignes de ces fichiers commençant par abbb suivi d'une chaîne de caractère quelconque se terminant par la lettre c en fin de ligne.
    Vous y êtes presque :

    Je dirais que cela regarde le contenu de tous les fichier commençant par abb et ayant un c en fin d'extention
    Je chipote mais je dirais plutôt "ayant un 'c' en fin de nom" (le shell se fiche des extensions et en l'occurrence un fichier qui se nommerait simplement "abbc" serait parsé par grep avec cette expression).

    Il affiche alors le contenu des lignes de ces fichiers commençant par abbb

    ^ab\{2\} => "commençant par abb" plutôt (ce qui aurait été plus simple à écrire dans l'expression rationnelle d'ailleurs).

    suivi d'une chaîne de caractère quelconque
    Je préciserais de taille quelconque (pouvant même être de 0 caractères).

    se terminant par la lettre c en fin de ligne.
    Oui mais il manque un bout avant

    \..*c => \. donc un carractère ".", encore .* (donc chaine quelconque avec taille quelconque) et enfin "c".

    Cordialement,
    Idriss

  5. #5
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    J'avais fait l'impasse sur cette remarque :

    Citation Envoyé par Amnael Voir le message
    En revanche, je ne connaissais pas la commande xargs, on ne l'a même jamais évoqué en cours, je pense donc qu'il faut utiliser une autre solution.
    Pour un truc aussi minim que xargs, je ne pense pas, à moins que ça ait été explicitement interdit (du genre "seul les commandes vues en cours sont autorisées" ce qui serait légèrement bête de la part de l'enseignant m'enfin bon là n'est pas le débat)... n'hésites pas à leur poser la question (en citant xargs ou awk par exemple) avant le jour de ton partiel et tu verra bien.

    En tout cas, il ne faut jamais se limiter à ce qui est enseigné en cours et toujours être pragmatique

  6. #6
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 756
    Par défaut
    Merci pour toutes ces explications. J'espère ne plus avoir d'autres soucis


    Pour le grep, disons que la consigne dit qu'il y a un nom de fichier par ligne donc c'est vrai qu'il est inutile ici. Mais si ça n'avait pas été le cas, il aurait pu y avoir un nom de fichier sur une ligne et un truc complètement à part sur une autre ligne. Mais bon je chipote là pour un exam de rattrapage je vais pas me casser la tête aussi loin vous avez raison cat est tout indiqué

  7. #7
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Bah dans ce cas, c'est pas en testant le fait qu'il y ait un "." dans le nom du fichier qui va te garantir que s'en est un
    Un fichier n'a pas nécessairement d'extension sous Unix (souvent il n'en a pas, les extensions ne servent qu'aux programmes pas à l'OS ni au shell).
    Un répertoire quant à lui peut aussi être nommé avec un "." et une ligne peut très bien contenir un "." sans qu'elle corresponde à un nom de fichier.

    Une façon d'être certain que seuls les fichiers soient traités :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat liste-nom.txt|xargs -I{} bash -c "[[ -f {} ]] && ls -l {}" > fichier.txt
    Si tu veux prendre en compte les fichiers et les répertoires :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat liste-nom.txt|xargs -I{} bash -c "[[ -e {} ]] && ls -l {}" > fichier.txt
    Après c'est pas utile, la consigne dit bien "dont les désignations se trouvent dans liste-nom.txt (une désignation par ligne)"

    Idriss

  8. #8
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Si on ne chipote pas (genre fichiers avec espace ou return dans le nom), j'aurais dit à la louche:

    1 - Ecrire dans fichier.txt les informations détaillées des fichiers dont les désignations se trouve dans le fichier liste-nom.txt (une désignation par ligne). Si fichier.txt existe déjà son contenu est écrasé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ls -l `cat liste-nom.txt` > fichier.txt
    2- Afficher le nom du fichier ordinaire ayant la plus grande taille dans le répertoire courant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ls -ls | sort -n | tail -1
    C'est une commande que j'utilise assez souvent: ls -ls | sort -n | tail.

    Rq: cette commande affiche indubitablement le nom du fichier ayant la plus grande taille (encore que, s'il y a des "gros" répertoires...).
    À quoi l'on pourra m'objecter: "oui, mais pas que"
    À quoi j'objecterais: "il n'a pas dit "que"" (s'il avait dit "afficher juste le nom du fichier...", je dis pas)
    À quoi l'on pourrait m'objecter: "oui, mais dans ce cas, un simple ls affiche aussi le nom du fichier ayant la plus grande taille (quoique bien noyé dans la masse! (et complètement inutilisable en pratique!!))"
    À quoi, je répondrais: "oui, bon, d'accord. Va pour ls -ls | sort -n | tail -1 | awk '{print $NF}'
    mais c'est plus long à taper...

  9. #9
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut


    Citation Envoyé par jack-ft Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ls -ls | sort -n | tail -1
    Tu viens d'ailleurs de me montrer que mes deux solutions (oui les deux en plus ) pour cette question étaient fausses .

    En effet, j'ai d'abord constaté qu'on avait des résultats différents :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ ls -ls|sort -n|tail -1|awk '{print $NF}' # ta solution
    YYYY
    $ ls -l|awk '($8 != ""){lst[$5"_"$8]=$8} END {n=asorti(lst, sorted); print lst[sorted[n]]}' # ma solution 1
    XXXX
    $ ls -1|xargs -Ifichier stat -c "%s;fichier" fichier|sort -r|head -n1|cut -d";" -f2 # ma solution 2
    XXXX
    Et j'ai vérifié

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ stat -c "%s" YYYY
    74199822
    $ stat -c "%s" XXXX
    90
    En effet, mon tri se fait dans les deux cas "alphabétiquement" au lieu d'être fait numériquement.

    Voici d'abord une correction pour ma seconde solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ ls -1|xargs -Ifichier stat -c "%s;fichier" fichier|sort -rn|head -n1|cut -d";" -f2
    YYYY
    Ici je rajoute juste l'option -n mais bon, c'est juste histoire de corriger cette version (qui n'est pas la plus simple à écrire et qui est la plus lente de toute en terme de perf)

    Et enfin ma première solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ ls -l|awk '($8 != ""){lst[$5]=$8} END {for(size in lst)sorted[i++]=size+0; n=asort(sorted); print lst[sorted[n]]}'
    YYYY
    Cette fois je prends directement la taille comme clef (colonne 5 du ls -l) et je fait un tableau intermédiaire ou j'ajoute une valeur typée (castée grâce au +0, sans le +0 cette solution ne fonctionne pas ).
    Et enfin le tri asort va fonctionner numériquement sur les tailles qui servent de valeur au tableau sorted et de clefs au tableau lst (qui lui est de la forme <"taille","nom fichier">).

    Bon elle est légèrement "tordue" cette solution mais elle a le mérite de n'utiliser qu'un seul pipe et donc d'éviter la multiplication des processus pour un même résultat. C'est personnellement celle que je choisirait (d'autant que l'une des deux autres passe aussi par awk)...

    J’ajoute aussi que c'est visiblement la plus rapide à s'exécuter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ date +"%s_%N"; for i in {1..1000}; do ls -l|awk '($8 != ""){lst[$5]=$8} END {for(size in lst)sorted[i++]=size+0; n=asort(sorted); print lst[sorted[n]]}' > /dev/null; done; date +"%s_%N"
    1402423972_987557018
    1402423977_110683332
    $ date +"%s_%N"; for i in {1..1000}; do ls -1|xargs -Ifichier stat -c "%s;fichier" fichier|sort -rn|head -n1|cut -d";" -f2 > /dev/null; done; date +"%s_%N"
    1402424010_073872621
    1402424077_028071179
    $ date +"%s_%N"; for i in {1..1000}; do ls -ls|sort -n|tail -1|awk '{print $NF}' > /dev/null; done; date +"%s_%N"                 
    1402424096_330145840
    1402424103_541788046
    Bon la solution de jack-ft prend deux secondes de plus, c'est pas énorme sur 31*1000 fichiers et vu que ce test n'est pas forcement hyper précis.
    En revanche on voit bien que la solution ls -1|xargs -Ifichier stat -c "%s;fichier" fichier|sort -rn|head -n1|cut -d";" -f2 prend au moins 60 secondes de plus que les autres

    Cordialement,
    Idriss

  10. #10
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 347
    Par défaut
    Bonjour,

    Ca ne le ferais pas juste (bon avec le même défaut si très très gros répertoire) :

  11. #11
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut


    Citation Envoyé par man
    -S sort by file size
    J'imaginais pas qu'il y avait une option pour ça

    Et soumise à mon test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ date +"%s_%N"; for i in {1..1000}; do ls -S | head -1 >/dev/null; done; date +"%s_%N"
    1402429660_461028069
    1402429663_767052977
    Un seul pipe, plus rapide à écrire et une seconde de moins que ma solution avec awk => meilleure solution

  12. #12
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Bonjour,

    Ca ne le ferais pas juste (bon avec le même défaut si très très gros répertoire) :


    Citation Envoyé par ok.Idriss Voir le message
    J'imaginais pas qu'il y avait une option pour ça
    Moi non plus! (sinon je l'eusse utilisée!)

    Un seul pipe, plus rapide à écrire et une seconde de moins que ma solution avec awk => meilleure solution
    Je vais tâcher de la retenir pour la prochaine fois!

    PS: ça marche même avec Cygwin et GnuWin32!

  13. #13
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 756
    Par défaut
    Aloa, j'ai bien aimé votre solution pour afficher le plus gros fichier

    Petite question quand même sur head/tail au passage.

    Je sais que de base ces commande affiche les 10 première/dernière ligne du fichier passé en paramètre ou de l'entrée standard.


    Mais j'avoue ne pas connaître l'option -1 à priori ça semble faire le travail d'un sort (est le chiffre 1 ou la lettre l au passage je suis même pas sur )

    La solution avec le sort est celle qui me parait la plus compréhensible du coup...

    EDIT: J'ai testé le coup du ls -S; en fait ça fait déjà un trie. Alors que ls -s affiche la taille de tous les fichiers sans les classer.
    On doit pouvoir reconstruire ls -S avec ls -s et sort d'où le fait que sort n'apparaissent pas !

  14. #14
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Bonsoir.

    Citation Envoyé par Amnael Voir le message
    Mais j'avoue ne pas connaître l'option -1 à priori ça semble faire le travail d'un sort (est le chiffre 1 ou la lettre l au passage je suis même pas sur )
    C'est un raccourcis de l'option -n (aussi bien pour head que pour tail).

    -1 => -n1 ;
    -2 => -n2 ;
    -3 => -n3 ;
    etc

    Et :

    Citation Envoyé par man tail
    -n, --lines=K
    output the last K lines, instead of the last 10; or use -n +K to output lines starting with the Kth
    Citation Envoyé par man head
    -n, --lines=[-]K
    print the first K lines instead of the first 10; with the leading ‘-’, print all but the last K lines of each file
    Donc en gros, par défaut on prend les 10 dernières/premières lignes, et avec l'option -nK ou --lines=K ou -K (avec K entier) on prend les K dernières/premières lignes.

    Citation Envoyé par Amnael Voir le message
    La solution avec le sort est celle qui me parait la plus compréhensible du coup...
    Pas la plus performante (et ls -S je vois pas trop comment on peut faire plus simple et plus compréhensible ).

    Citation Envoyé par Amnael Voir le message
    J'ai testé le coup du ls -S; en fait ça fait déjà un trie. Alors que ls -s affiche la taille de tous les fichiers sans les classer.
    On doit pouvoir reconstruire ls -S avec ls -s et sort d'où le fait que sort n'apparaissent pas !
    RTFM (F pour "friendly" of course )

    =>

    Citation Envoyé par man ls
    -S sort by file size
    Cordialement,
    Idriss

  15. #15
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 756
    Par défaut
    J'ai encore une question à la con x)

    Comment on fait pour afficher une partie d'un texte/champ.

    Il y a bien sur cut -d délimiteur -f numéro du champ à couper

    Seulement ça c'est pour les fichiers, si je veux faire ce genre de chose sur l'entrée standard, le résultat d'une commande par exemple:

    un truc du style cut -option `date` qui afficherait Mercredi.

    Bien sur toujours en une seule commande, sinon suffit d'écrire le résultat de date dans un fchier et de faire un cut dans le fichier :d

  16. #16
    Rédacteur/Modérateur
    Avatar de Winnt
    Homme Profil pro
    budget et contrôle de gestion
    Inscrit en
    Décembre 2006
    Messages
    1 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : budget et contrôle de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 978
    Par défaut
    Salut,

    Simplement en utilisant le pipe.
    Winnt
    Merci de lire les règles du forum LaTeX et Qu'est ce qu'un ECM ?.
    N'hésitez pas à parcourir la FAQ la réponse y est peut-être déjà.
    Pensez au bouton si votre problème est résolu.


    C'est en Linuxant qu'on devient .... geek
    Et c'est en LateXant qu'on devient flemmard
    Mon blog tout neuf.
    Articles : présentation de la distribution Gentoo, Les index sous LaTeX et leur personnalisation.

  17. #17
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 756
    Par défaut
    J'ai essayé mais pas moyen...

  18. #18
    Rédacteur/Modérateur
    Avatar de Winnt
    Homme Profil pro
    budget et contrôle de gestion
    Inscrit en
    Décembre 2006
    Messages
    1 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : budget et contrôle de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 978
    Par défaut
    Salut,

    Donne une exemple de ce que tu veux faire car là ce n'est pas clair.
    Winnt
    Merci de lire les règles du forum LaTeX et Qu'est ce qu'un ECM ?.
    N'hésitez pas à parcourir la FAQ la réponse y est peut-être déjà.
    Pensez au bouton si votre problème est résolu.


    C'est en Linuxant qu'on devient .... geek
    Et c'est en LateXant qu'on devient flemmard
    Mon blog tout neuf.
    Articles : présentation de la distribution Gentoo, Les index sous LaTeX et leur personnalisation.

  19. #19
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 756
    Par défaut
    Bah, tu écris en ligne de commande le résultat de ta commande date

    Donc un truc du style


    Mercredi 18 Juin 2014 19h19

    Et bien au lieu de vouloir retourner la date entière tu voudras retourner que le jour (ça doit pouvoir se faire avec une optino de date, mais c'ets pas le but, c'est un exemple que tu peux généraliser à tout)

    Ex: commande "Bonjour à tous" affichera Bonjour.

  20. #20
    Rédacteur/Modérateur
    Avatar de Winnt
    Homme Profil pro
    budget et contrôle de gestion
    Inscrit en
    Décembre 2006
    Messages
    1 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : budget et contrôle de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 978
    Par défaut
    Salut,

    donnera Juste un pipe pour envoyer la sortie à cut.
    Winnt
    Merci de lire les règles du forum LaTeX et Qu'est ce qu'un ECM ?.
    N'hésitez pas à parcourir la FAQ la réponse y est peut-être déjà.
    Pensez au bouton si votre problème est résolu.


    C'est en Linuxant qu'on devient .... geek
    Et c'est en LateXant qu'on devient flemmard
    Mon blog tout neuf.
    Articles : présentation de la distribution Gentoo, Les index sous LaTeX et leur personnalisation.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. utiliser une seule commande pour créer plusieur fichier
    Par waldomania dans le forum Administration système
    Réponses: 1
    Dernier message: 13/12/2009, 16h43
  2. créer cette matrice avec une seule commande
    Par Medoou dans le forum MATLAB
    Réponses: 8
    Dernier message: 15/07/2009, 08h17
  3. Réponses: 4
    Dernier message: 29/06/2009, 11h46
  4. [LabVIEW 8.6]Deux boutons pour une seule commande.
    Par bobico dans le forum LabVIEW
    Réponses: 4
    Dernier message: 08/06/2009, 16h03
  5. Création de plusieurs FK en une seule commande ALTER
    Par Lawyer666 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 25/06/2007, 19h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo