#26 Le 15/07/2017, à 11: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
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#27 Le 15/07/2017, à 23: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 15/07/2017, à 23: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
Dernière modification par Bybeu (Le 15/07/2017, à 23:15)
Hors ligne
#29 Le 16/07/2017, à 09: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, à 10: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
Dernière modification par Hizoka (Le 16/07/2017, à 10:38)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#31 Le 16/07/2017, à 11: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.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#32 Le 16/07/2017, à 19: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
Dernière modification par Hizoka (Le 16/07/2017, à 19:05)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#33 Le 16/07/2017, à 21: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, à 22: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 !
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#35 Le 17/07/2017, à 09: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
Hors ligne
#36 Le 17/07/2017, à 13: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
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, à 14:49
- Hizoka
Re : [Résolu] Trouver les plus gros répertoires sans fichier flag dedans
Attention, << est différent de < <.
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#38 Le 17/07/2017, à 14: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
Hors ligne
#39 Le 17/07/2017, à 16: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.
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#40 Le 17/07/2017, à 17: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
C'est sûrement que je pense que les scripts pensent comme je lis, de gauche à droite.
Hors ligne
#41 Le 25/07/2017, à 11: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