Contenu | Rechercher | Menus

Annonce

Ubuntu 16.04 LTS
Commandez vos DVD et clés USB Ubuntu-fr !

Pour en savoir un peu plus sur l'équipe du forum.

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.

#26 Le 15/07/2017, à 12:11

Hizoka

Re : [Résolu] Trouver les plus gros répertoires sans fichier flag dedans

de ta commande originale :

du -t-5G ????/??????\ *|sort -nr|head -40

si ca te sert à rien, tu peux virer le head.

je trouve que ca permet d'avancer par étape mais bon tongue

Hors ligne

#27 Le 16/07/2017, à 00:04

Bybeu

Re : [Résolu] Trouver les plus gros répertoires sans fichier flag dedans

Je pige pas, c'est le jeu "Le compte est bon ou quoi" ? 5 Þ 40 = 20... mais en base combien ?

Hors ligne

#28 Le 16/07/2017, à 00:12

Bybeu

Re : [Résolu] Trouver les plus gros répertoires sans fichier flag dedans

Je triche... j'ai modifié le titre (Trouver le[s] plus gros rép[s]...)

Chercher c'est bien, trouver c'est mieux lol

Dernière modification par Bybeu (Le 16/07/2017, à 00:15)

Hors ligne

#29 Le 16/07/2017, à 10:27

Bybeu

Re : [Résolu] Trouver les plus gros répertoires sans fichier flag dedans

Merci Hizoka
J'ai pu essayer ta soluce classe. J'ai l'ai un peu modifiée pour qu'elle ressemble plus à la sortie spatiate de du, et allégée car je ne me sers pas de taille pour filtrer (juste pour trier) - remarque que j'ai inversé l'éventuel filtre de taille (Max->Min) car je commence par nettoyer mes plus gros répertoires :

#!/bin/bash
# Variables
NombreLigne="5" # nombre de ligne à afficher
TailleMin=0 # Taille minimale recherchée en M

# Boucle sur les dossiers renvoyé par du et classé par taille et ne gardera (ne génèrera) que les $NombreLigne premiers echo
while read RetourDU
do
    # Récupération de la taille du dossier
    TailleDossier="${RetourDU%%[[:space:]]*}"

    # Récupération de l'adresse du dossier
    AdresseDossier="/${RetourDU#*/}"

    # Ne renvoie le texte que s'il n'y a pas de fichier 0k dans le dossier
[[ ! -f "${AdresseDossier}/0k" ]] && echo "${RetourDU}"|cut -d"/" -f1,5-6
done < <(du -s -t${TailleMin}M "${PWD}"/????/??????\ * | sort -nr) | head -"${NombreLigne}"

Tu pourrais m'expliquer comment marche ton truc magique < <(...)|head -N stp ? Car tu vois j'ai été obligé de mettre un cut en sortie d'echo car en enlevant ${PWD} de du ça gazait pas, et en mettant head dans la parenthèse il ne respectait pas NombreLigne (retour sur le 10 par défaut et donc les plus gros réps étant déjà flagués, la sortie était minus ).
Et les définitions de variables dans la boucle, c'est des regexp ?

Hors ligne

#30 Le 16/07/2017, à 11:36

Hizoka

Re : [Résolu] Trouver les plus gros répertoires sans fichier flag dedans

Ca c'est du bash avec manipulation des variables : https://abs.traduc.org/abs-fr/ch10.html

TailleDossier="${RetourDU%%[[:space:]]*}"

Je lui dit utilise la variable RetourDU, efface tout jusqu'au dernier space (tab, espace, espace insecable...) en partant de la fin.

AdresseDossier="/${RetourDU#*/}"

Rebelotte, sauf que la je lui dit efface tout jusqu'au 1er / en partant du début, et vu qu'il efface également le /, j'en ai rajouté un manuellement.

Within ‘[’ and ‘]’, character classes can be specified using the syntax [:class:], where class is one of the following classes defined in the POSIX standard:
alnum alpha ascii blank cntrl digit graph lower print
punct space upper word xdigit

Voici l'explication du [[:space:]].


echo "${RetourDU}"|cut -d"/" -f1,5-6

ne se fait pas, on fait :

cut -d"/" -f1,5-6 <<< "${RetourDU}"

Comme ça on évite un echo et surtout un pipe, c'est du code en plus, des risques d'erreurs et une perte de temps.
mais si ton but c'est de virer le ${PWD} du retour, autant continuer en bash pur et éviter des commandes externes :

echo -e "${TailleDossier}\t${AdresseDossier/${PWD}/}"

Taille du dossier, tabulation, adresse du dossier en virant ${PWD}/.


done < <(du -s -t${TailleMin}M "${PWD}"/????/??????\ * | sort -nr) | head -"${NombreLigne}"

Si je dis pas de bétise, < <() execute les commandes dans un sous shell et envoie les valeurs dans la boucle qui sont traitées par read.
Le head est pippé sur la boucle ce qui permet de respecter ta demande initiale.
Le head fonctionne sur les echo qu'on envoie et non sur les retours de du.
En fait on ne limite pas les retours de du mais uniquement les infos qu'on affiche via la boucle.
Car comme tu le dis si tu limites le retour de du et que les x dossiers sont déjà traités, il n'y a plus rien.
Alors que si tu récupères tous les dossiers, tu es sûr de ne pas passer à côté de petits dossiers.


Pour le nombre de ligne de head, tu avais mis 40, j'ai utilisé 20 puis 5 pour faire plus simple dans mes tests tongue

Dernière modification par Hizoka (Le 16/07/2017, à 11:38)

Hors ligne

#31 Le 16/07/2017, à 12:19

Watael

Re : [Résolu] Trouver les plus gros répertoires sans fichier flag dedans

echo "${RetourDU}"|cut -d"/" -f1,5-6

ne se fait pas, on fait :

cut -d"/" -f1,5-6 <<< "${RetourDU}"

bof.


eval, c'est mal.

Hors ligne

#32 Le 16/07/2017, à 20:05

Hizoka

Re : [Résolu] Trouver les plus gros répertoires sans fichier flag dedans

ha bon ?
ca evite un pipe inutile...

Enfin si c'est ta seule remarque sur ce que j'ai dit, ça me va smile

Dernière modification par Hizoka (Le 16/07/2017, à 20:05)

Hors ligne

#33 Le 16/07/2017, à 22:48

Bybeu

Re : [Résolu] Trouver les plus gros répertoires sans fichier flag dedans

Le <<< , c'est pas un epip ? Enfin, un pipe à l'envers ?

Hors ligne

#34 Le 16/07/2017, à 23:24

Watael

Re : [Résolu] Trouver les plus gros répertoires sans fichier flag dedans

heu, non. c'est un here-string.
plus proche, donc, du here-doc !


eval, c'est mal.

Hors ligne

#35 Le 17/07/2017, à 10:32

Bybeu

Re : [Résolu] Trouver les plus gros répertoires sans fichier flag dedans

Merci les gars, j'ai plus qu'à lire... et à comprendre smile

Hors ligne

#36 Le 17/07/2017, à 14:22

Bybeu

Re : [Résolu] Trouver les plus gros répertoires sans fichier flag dedans

Mais pourquoi donc ai-je mis '<<<' dans ma dernière question roll
Dans le script de Hizoka, c'était donc un here-doc. Faudrait que je pratique un peu plus.

Hors ligne

#37 Le 17/07/2017, à 15:49

Hizoka

Re : [Résolu] Trouver les plus gros répertoires sans fichier flag dedans

Attention, << est différent de < <.

Hors ligne

#38 Le 17/07/2017, à 15:55

Bybeu

Re : [Résolu] Trouver les plus gros répertoires sans fichier flag dedans

Ha ha, t'es cuit : maintenant que tu as vendu la mêche, faut expliquer big_smilehmm

Hors ligne

#39 Le 17/07/2017, à 17:53

Hizoka

Re : [Résolu] Trouver les plus gros répertoires sans fichier flag dedans

Watael le fera surement bien mieux que moi, mais la seule utilisation que je connais de << c'est :

cat << eof
blabla
blibli
bloblo
eof

et pour < <(), voir plus haut.

Hors ligne

#40 Le 17/07/2017, à 18:12

Bybeu

Re : [Résolu] Trouver les plus gros répertoires sans fichier flag dedans

Pour le codeur basique que je suis, l'utilisation de ces syntaxes sont autant de saut qualitatifs d'expertise dans des mondes inconnus :
1) 1 commande, ça va
2) 2 commandes à exécuter dans tous les cas : comd1; comd2 , ça va
3) 2 commandes enchaînées conditionnellement selon le <s>résultat</s> la réussite ou l'échec de la première : comd1 && comd2 ou comd1 || comd2 , ça va .... encore
4) Sortie de la première dans l'entrée de la deuxième, j'adore  : comd1 | comd2
5) Envoyer la sortie d'une commande dans 1 nouveau ficher : comd1 > toto , ça va
6) Compléter un fichier par la sortie d'un commande : Comd1 >> toto , génial
7) Mais dès qu'il y a un > (<) à l'envers, je suis au bord du monde sad
C'est sûrement que je pense que les scripts pensent comme je lis, de gauche à droite.

Hors ligne

#41 Le 25/07/2017, à 12:30

Bybeu

Re : [Résolu] Trouver les plus gros répertoires sans fichier flag dedans

Je me suis fait se one-liner :

cat ~/.bash_aliases|grep big
alias big="find /srv/mmedia/Photos/????/ -maxdepth 1 -mindepth 1 -type d \( -execdir test -f '{}/0k' \; -o -print0 \)|du -sh --files0-from=-|sort -rh|head -5|cut -d"/" -f1,6|sed 's/\///' -"

Hors ligne