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 :

[Débutant]Script pour lister certains type de fichiers, et envoyer la taille globale dans un fichier txt


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Octobre 2018
    Messages : 8
    Par défaut [Débutant]Script pour lister certains type de fichiers, et envoyer la taille globale dans un fichier txt
    Bonjour à tous,
    je me permet de m'inscrire sur ce forum, après l'avoir parcouru ( et ne pas avoir trouvé la réponse, sauf erreur), afin d'obtenir de l'aide sur la réalisation d'un petit script qui me permettrait de scanner un poste utilisateur de mon réseau ( j'y suis admin, of course ) et afficher un résultat anonyme ( pas besoin de l'emplacement du fichier, ni du propriétaire) avec uniquement un global.
    Je ne suis probablement pas très clair, je décris un exemple :

    Dans le cadre de contrôle prévus, je dois scanner l'ensemble du SI afin de quantifier l'espace disque pris par des fichiers de type précis, disons *.type1 *.type2 et *.type3, je souhaite obtenir ensuite un fichier resultat.txt dans lequel apparaîtrait des lignes *.type1 xGo / *.type2 yGo / *type3 zMo

    Je tente diverses combinaisons simples autour de find et ls, mais n'ai rien obtenu de satisfaisant, pensez vous possible de faire un petit script simple pour arriver à ce résultat ?

    Merci par avance de votre aide
    Cordialement

  2. #2
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Octobre 2018
    Messages : 8
    Par défaut
    j'ai trouvé quand même une piste, que j'explore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "Total fichiers \".txt\": $(( $(find . -type f -iname "*.txt" -printf '+%s') ))"
    mais il me manque l'incrémentation du fichier resultat.txt avec type de fichier 1 / taille totale suivi du type 2, 3 etc que je puisse ensuite reprendre simplement avec un calc pour sortir le tableau rapidement et propre

  3. #3
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Octobre 2018
    Messages : 8
    Par défaut
    Aller, encore en progrès, mais très rustique, je pense : en prenant l'exemple d'un fichier odt.. Reste à encore augmenter le tout par chaque type de fichier que je veux ajouter et trouver comment aller à la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf "odt " > odt.txt |find . -type f -iname "µ.odt" -exec du -h -c {} + | tail -1 >> odt.txt

  4. #4
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 307
    Par défaut
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     find / -type f -iregex ".*\.\(mp4\|webm\|mpg\|avi\)" -printf '%s\t\t%p\n' 2>/dev/null
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     find / -type f -iregex ".*\.\(mp4\|webm\|mpg\|avi\)" -printf '%s\t\t%p\n' 2>/dev/null |awk '{total+=$1;} END{print total;}'

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 141
    Par défaut
    Pour un total par extension :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find . -type f -iregex '.*\.\(mp4\|webm\|mpg\|avi\)$' -printf '%f %k\n' | awk '{gsub(/^.*\./, "", $1);S[tolower($1)]+=$2} END{for (X in S){print X " : " S[X] " k"}}'
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  6. #6
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 537
    Par défaut
    Autre approche :
    Cela affichera le total des fichiers de l'extension.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  7. #7
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Octobre 2018
    Messages : 8
    Par défaut
    Merci beaucoup pour vos réponses, c’est top !
    Je teste demain matin sur mon ordi Linux !
    Top !

  8. #8
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Octobre 2018
    Messages : 8
    Par défaut
    Hum, le résultat est zarbi, pour ce qui concerne les commandes avec iregex...
    On s’approche de ce que je souhaite, mais ça me donne en réponse ( sur mon test je fais une recherche odt, ods et pdf ) une liste très longue, et des résultats farfelus côté taille. Mais ça s’en rapproche, je vais me plonger dans les explications sur l’utilisation de ces outils, je ne maîtrise pas la signification de ce que j’ecris, ça doit venir de là 🤪
    Pour le du, je n’y avais pas pensé, c’est assez élégant mais par rapport à find, je ne perd pas la recherche sur l’ensemble de l’ordi ?

  9. #9
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Octobre 2018
    Messages : 8
    Par défaut
    Je me répond : avec du ca ne fonctionne pas - logiquement - en mode recherche donc ne convient pas.
    Je continue autour de la commande au dessus, avec awk.
    Les résultats apparaissent en listant l’ensemble des fichiers - Je crois - mais avec juste un mot du nom de fichier s’il était avec des espaces. Je n’arrive pas à piger comment sortir 3 lignes du type :
    PDF X Mo ( au total sur le disque dur en somme )
    Odt Y Mo
    Ods Z Mo

  10. #10
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 141
    Par défaut
    Si tu as des noms de fichiers ou de répertoires qui comportent des espaces, ça complique un peu le travail en effet.
    Essaie avec ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find . -type f -iregex '.*\.\(pdf\|odt\|ods\)$' -printf '%f:%k\n' | awk 'BEGIN{FS=":"} {gsub(/^.*\./,"",$1);S[tolower($1)]+=$2} END{for (X in S){printf "%s %d Mo\n", X, (S[X]/1024)}}'
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  11. #11
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 345
    Par défaut
    Salut,
    Le problème est le même avec un fichier 'Mon:Fichier.pdf'
    Je pense que le %k de printf renvoie toujours un nombre entier donc aucun risque d'avoir un '.' .
    Il faut utilisé $0 dans le gsub.
    Cordialement.

  12. #12
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 537
    Par défaut
    Essayes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find . -name "*.odt" -exec echo -n '"{}" ' \;|xargs du -chs|tails -n1|cut -f 1
    Cela affichera le total de la taille de tous les fichiers du dossier courant. Tu peux remplacer . par n'importe quel chemin d'accès.

    Certainement simplifiable avec une bonne maitrise du bash que je n'ai pas.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  13. #13
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Octobre 2018
    Messages : 8
    Par défaut
    Merci à vous, j’approche du résultat final nickel, reste quelques détails à régler mais c’est déjà utilisable en l’état
    Mille mercis !

  14. #14
    Invité
    Invité(e)
    Par défaut
    -exec echo -n... ?
    tu voulais dire -print0 | xargs -0 ..., autant dire -exec du -chs {} +.

  15. #15
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 257
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 257
    Par défaut
    Bonsoir,

    que j'utilise la ligne de al1_24 à peine modifiée à la fin car je fais tourner ça dans un dossier où il n'y a que 3 petits fichiers .odt et donc je transforme {printf "%s %d Mo\n", X, (S[X]/1024)} en {printf "%s %d ko\n", X, (S[X])}, ou que j'utilise la ligne de chrtophe (en enlevant le "s" de tail !) + l'adaptation de N_BaH, soit find . -name "*.odt" -exec du -chs {} +|tail -n1|cut -f 1, dans les deux cas je récupère 416 ko.

    Or mes trois fichiers totalisent 419.6 ko :
    Nom : 3_fic_odt.png
Affichages : 155
Taille : 10,1 Ko

    Il est où, le blème ? Car c'est un coup à faire échouer une sauvegarde, ça, si on calcule mal l'espace nécessaire :
    clic droit / propriétés des 3 fichiers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
          195 363
          189 971
           34 177
    total 419 511
    Pour arriver à ce total, la ligne d'al1_24 doit être un poil modifiée ainsi : -printf '%f:%k\n' --> -printf '%f:%s\n', mais je ne vois pas trop comment modifier le mix chrtophe-N_BaH...

  16. #16
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find ... -print0 | xargs -0 -- du --total --bytes
    Citation Envoyé par man du
    -b, --bytes equivalent to '--apparent-size --block-size=1'

  17. #17
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 257
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 257
    Par défaut
    Excellent !

    Et pour donc n'avoir que la valeur du total,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # find . -name "*.odt" -print0 | xargs -0 -- du --total --bytes |tail -n1|cut -f 1
    419511
    L'autre ligne fonctionne aussi (à partir du moment où on le sait, ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # find . -name "*.odt" -exec du --total --bytes {} + |tail -n1|cut -f 1
    419511
    Peut-être un poil plus lisible ?

    EDIT :
    Citation Envoyé par al1_24 Voir le message
    Si tu as des noms de fichiers ou de répertoires qui comportent des espaces, ça complique un peu le travail en effet.
    Je n'ai pas eu cette impression : j'ai exactement le même résultat, dans un dossier de test, si je renomme un des fichiers avec des espaces, et idem avec un sous-dossier.

    Donc en gros, si on veut récupérer les tailles de plusieurs types de fichiers, je me contente de ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    # find . -type f -iregex '.*\.\(pdf\|odt\|ods\)$' -exec du --total --bytes {} + |tail -n1|cut -f 1

  18. #18
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 537
    Par défaut
    -exec echo -n... ?
    tu voulais dire -print0 | xargs -0 ..., autant dire -exec du -chs {} +.
    Ca marche pas. Quand j'ai des noms de fichiers à espace, ça prend chaque morceau comme un argument.

    Le code que j'ai mis ne fonctionnera que pour chercher un seul type de fichiers les .odt dans l'exemple. Rien n'empêche de faire une boucle avec.

    Mais comme précisé, je ne maitrise pas le bash.

    La solution des regex n'est pas à bannir, mais peut-être compliqué à utiliser sauf à recopier le code fourni sans le comprendre.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  19. #19
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Octobre 2018
    Messages : 8
    Par défaut
    Je reconnais que côté compréhension, je me fait l’effet d’un galérien, mais morceaux par morceaux, avec l’aide du net et manpage je vais y arriver
    J’ai plein de pistes de travail, c’est top, l’idee étant de ne pas bêtement copier le code mais comprendre ce que je fais pour faire évoluer ce script ensuite plus loin, en particulier, effectivement dans un cadre de sécurité et sauvegarde des données

  20. #20
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 345
    Par défaut
    Bonjour,

    Citation Envoyé par Jipété Voir le message
    Donc en gros, si on veut récupérer les tailles de plusieurs types de fichiers, je me contente de ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    # find . -type f -iregex '.*\.\(pdf\|odt\|ods\)$' -exec du --total --bytes {} + |tail -n1|cut -f 1
    Attention :
    Le iregex rate les fichiers rares dont le nom comporte un \n que iname ne rate pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    # find . -type f \( -iname '*.pdf' -o -iname '*.odt' -o -iname '*.ods' \) -exec du --total --bytes {} + |tail -n1|cut -f 1
    Cordialement.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 01/06/2017, 11h26
  2. un script pour Lister, Modifier, remplacer des noms de fichiers pour un upload?
    Par shadock0 dans le forum Shell et commandes POSIX
    Réponses: 2
    Dernier message: 27/09/2011, 21h47
  3. Réponses: 0
    Dernier message: 03/02/2011, 12h15
  4. [PowerShell] Script pour lister date des dernières modifications apportée à un fichier
    Par Thoms13 dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 16/03/2010, 12h39
  5. script pour lister les fichier
    Par deathness dans le forum Linux
    Réponses: 3
    Dernier message: 05/10/2008, 10h41

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