#1 Hier à 11:25
- BrunoL
tree : distinguer lien vers directory ou fichier
Bonjour,
Est-il possible dans une sortie de tree de distinguer un lien vers un répertoire d'un lien vers un fichier ? quel paramètre activer pour cela ?
Dans sa dernière ligne récapitulative tree distingue bien les 2.
Merci pour votre aide.
Hors ligne
#2 Hier à 11:49
- diesel
Re : tree : distinguer lien vers directory ou fichier
Tu veux faire quoi avec la sortie de tree ?
Amicalement.
Jean-Marie
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#3 Hier à 12:00
- BrunoL
Re : tree : distinguer lien vers directory ou fichier
Une analyse du disque dur. Cela me permet de vérifier les résultats de mon analyse.
Hors ligne
#4 Hier à 12:33
- Watael
Re : tree : distinguer lien vers directory ou fichier
Tu veux faire quoi avec la sortie de tree ?
bien des choses ! (non mais, de quoi je me mêle !
)
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#5 Hier à 12:41
- Watael
Re : tree : distinguer lien vers directory ou fichier
Bonjour,
Est-il possible dans une sortie de tree de distinguer un lien vers un répertoire d'un lien vers un fichier ? quel paramètre activer pour cela ?
Dans sa dernière ligne récapitulative tree distingue bien les 2.Merci pour votre aide.
$ tree -F
?
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#6 Hier à 12:54
- diesel
Re : tree : distinguer lien vers directory ou fichier
diesel a écrit :Tu veux faire quoi avec la sortie de tree ?
bien des choses ! (non mais, de quoi je me mêle !
![]()
![]()
)
C'est un juste retour des choses.
Mais pourquoi la question ?
Pour les liens, sur une sortie écran, on distingue bien la différence grâce à la couleur : un lien en vert vers un fichier en noir ; un lien en vert vers un répertoire en bleu foncé. Donc, si c'est pour utiliser la sortie directe dans le terminal de tree, il n'y a rien de particulier à faire.
Maintenant, si c'est pour retraiter derrière dans un script...
Amicalement.
Jean-Marie
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#7 Hier à 13:06
- Watael
Re : tree : distinguer lien vers directory ou fichier
ce serait encore pire que de traiter la sortie de ls !
la couleur ne passe pas dans less.
il faut ajouter quelques options :
$ tree -C | less -R
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#8 Hier à 13:16
- BrunoL
Re : tree : distinguer lien vers directory ou fichier
Pour satisfaire ces curiosités malsaines ; Je dois faire une analyse du contenu des fichiers d'arborescences de répertoires. Pour contrôler "l'exactitude" de mes traitements je compte m'appuyer sur le résultat d'un tree correspondant pour m'assurer de traiter les fichiers qu'il faut et ne pas en oublier.
Mais là j'ai un problème car (évidemment ...) la liste des fichiers que je détecte ne correspond pas à celle de tree. D'où ma réflexion sur les liens. Qui s'avère infondée car même en incluant la notion de lien j'ai toujours 20 répertoires qui sont identifiés comme des fichiers dans la sortie de tree.
Dis autrement, après multiples essai/erreur, si je prends la liste produite par tree, je compte les lignes avec [d....] et celles avec [-...] alors (1) le nombre total de lignes est correct (2) la ligne récapitulatif nnn directories, nnn files ne correspond pas au détail [d..] ou [-..] ou [l..] ... C'est mon problème.
J'ai beau tourner le pb dans tous les sens rien ne me permet d'isoler les 20 "objets" mal affectés sur les 912.191 lignes ! (Je parle bien ici du seul traitement du résultat de tree ). Ne mettant pas en doute les résultats de tree j'essaie de comprendre comment il affecte les lignes à directories ou files ... et donc ma question
Dernière modification par BrunoL (Hier à 13:23)
Hors ligne
#9 Hier à 14:13
- Watael
Re : tree : distinguer lien vers directory ou fichier
un lien vers un répertoire est un lien et un répertoire.
je suppose que tree, se contente d'afficher les propriétés des fichiers, et, qu'en interne, pour compter les répertoires et les fichiers, il fait une sorte de :
if test -d "$f"; then compteRep+=1; elif test -f "$f"; then compteFic+=1; fi
sans se préoccuper si ça peut aussi être des liens.
MAIS, comme on l'a dit, utiliser tree ou ls pour autre chose que de la visualisation est une mauvaise pratique.
on peut facilement, en shell en parsant find, ou en 100% bash, dénombrer les répertoires, les fichiers, et distinguer pour chacun s'il est aussi un lien, afin d'obtenir le compte des répertoires normaux, des liens vers des répertoires, des fichiers normaux, et des liens vers des fichiers.
Dernière modification par Watael (Hier à 14:25)
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#10 Hier à 17:26
- BrunoL
Re : tree : distinguer lien vers directory ou fichier
MAIS, comme on l'a dit, utiliser tree ou ls pour autre chose que de la visualisation est une mauvaise pratique.
Pourquoi ?
Personnellement j'apprécie énormément la production de tree car pour représenter la hiérarchie de fichiers dans un minimum de place, difficile de trouver mieux !
Le contenu d'une partition avec répertoire, fichier, lien, autorisation, taille et dernière mise à jour pour 900.000 lignes (dir + fic+ lien) en 110 Mo ... qui fait mieux ?
Ce qui me gêne c'est plutôt que les sommes :
$ grep -E '─ \[d' maPartition.tree | wc -l
$ grep -E '─ \[-' maPartition.tree | wc -l
$ grep -E '─ \[l' maPartition.tree| wc -l
ne sont pas raccord avec " ... directories, ... files" qui se trouve en fin d'édition. Mais je vais faire avec
Dernière modification par BrunoL (Hier à 17:28)
Hors ligne
#11 Hier à 19:25
- Watael
Re : tree : distinguer lien vers directory ou fichier
Pourquoi ?
ton sujet en est la démonstration.
c'est de ça dont il s'agit : une représentation qu'il est malaisé de traiter.
#!/bin/bash
oussa=/chemin/tonRepertoire
declare -i rep=0 lienRep=0 fic=0 lienFic=0
while read -d '' f
do
if test -d "$f"
then
if test -L "$f"
then
lienRep+=1
else
rep+=1
fi
elif test -f "$f"
then
if test -L "$f"
then
lienFic+=1
else
fic+=1
fi
fi
done < <(find "$oussa" -print0)
printf 'nb rép.: %d\nnb lienRep.: %d\nnb fic.: %d\nnb lienFic.: %d\n' $rep $lienRep $fic $lienFic
OU
#!/bin/bash
oussa=/chemin/tonRepertoire
shopt -s nullglob globstar dotglob
declare -i rep=0 lienRep=0 fic=0 lienFic=0
for f in "$oussa"/**
do
if test -d "$f"
then
if test -L "$f"
then
lienRep+=1
else
rep+=1
fi
elif test -f "$f"
then
if test -L "$f"
then
lienFic+=1
else
fic+=1
fi
fi
done
printf 'nb rép.: %d\nnb lienRep.: %d\nnb fic.: %d\nnb lienFic.: %d\n' $rep $lienRep $fic $lienFic
il y a des outils pour afficher des représentations, et des outils pour traiter le réél.
Dernière modification par Watael (Hier à 19:26)
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#12 Aujourd'hui à 10:28
- BrunoL
Re : tree : distinguer lien vers directory ou fichier
Hello Watael, très intéressant !
J'entends que plus on utilise d'outils de bas niveau et moins les risques de mauvaises interprétations (voire d'évolution chaotique) sont faible. Ok pour un professionnel qui veut des script stable dans le temps. Mais de là à généraliser ??
Néanmoins tu m'as soulevé un pb de taille. Il ne s'agit plus que de différences de ventilation fichier/rep mais de différences de résultats.
Ton script (dont je te remercie) ne donne pas les mêmes résultats que "tree". Aurais-tu donc raison fondamentalement ? Mais alors "tree" donne des résultats faux ??!
Pour l'anecdote :
ton script -> nb rép.: 97236 ; nb lienRep.: 41 ; nb fic.: 893253 ; nb lienFic.: 8709 ; nbTot : 999 239
tree ${/chemin/tonRepertoire} -a -p -D --timefmt %s -s -n --filesfirst ) : 97277 directories, 905229 files
Manque plus de 3000 fichiers
Semble provenir du traitement des fichier cachés ...
J'en suis paralysé
Hors ligne
#13 Aujourd'hui à 10:51
- iznobe
Re : tree : distinguer lien vers directory ou fichier
Bonjour , plus simple pour obtenir le nombre de fichiers d ' un répertoire et de toute l' arborescence fille:
find /chemin/oussa -type f | wc -l
pareil pour le nombre de dossier :
find /chemin/oussa -type d | wc -l
comme ca tu peux comparer avec tree .
a noter qu ' il doit bien exister dans tree un option qui permet de lire ( et donc de compter ) fichiers cachés :
OPTIONS Tree understands the following command line switches: LISTING OPTIONS -a All files are printed. By default tree does not print hidden files (those beginning with a dot `.'). In no event does tree print the file system constructs `.' (current directory) and `..' (previous di‐ rectory).
En tout cas , il y a bien une difference entre les 2 :
iznobe@iznobe-PC:~/Scripts$ tree -a
...
1968 directories, 12951 files
iznobe@iznobe-PC:~/Scripts$
iznobe@iznobe-PC:~/Scripts$ find . -type f | wc -l
12915
iznobe@iznobe-PC:~/Scripts$ find . -type d | wc -l
1968
iznobe@iznobe-PC:~/Scripts$
Tree en trouve plus chez moi
Dernière modification par iznobe (Aujourd'hui à 10:57)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#14 Aujourd'hui à 11:21
- BrunoL
Re : tree : distinguer lien vers directory ou fichier
Super Iznobe plus on a de source d'information/vérification et plus on a de ... différences
sudo find ${RacineTravail} -type f | wc -l -> 893382
sudo find ${RacineTravail} -type d | wc -l -> 97236
Racine OK mais fichier j'ai un nouveau chiffre ... je relève les manches ...
Hors ligne
#15 Aujourd'hui à 11:39
- iznobe
Re : tree : distinguer lien vers directory ou fichier
tree -a sur systeme au complet : 121719 directories, 1189223 files
tree suit les liens symboliques sans indiquer d' option autre que " -a ". ce qui probablement explique qu ' il " trouve " plus de choses .
iznobe@iznobe-pc:~/Scripts$ sudo find / -type d | wc -l
[sudo] Mot de passe de iznobe :
find: ‘/run/user/1000/gvfs’: Permission non accordée
find: ‘/run/user/1000/doc’: Permission non accordée
120690
iznobe@iznobe-pc:~/Scripts$
Je ne sais pas ce qu ' il en est de find pour les liens ( je pense qu ' il ne les suis pas contrairement a tree ) , mais , ce qui est sur , c' est qu ' il ne compte rien dans les parties auxquelles il n' a pas acces , comme on le voit ici pour 2 dossiers .
Dernière modification par iznobe (Aujourd'hui à 11:40)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#16 Aujourd'hui à 16:55
- Watael
Re : tree : distinguer lien vers directory ou fichier
@iznobe, pour ne jamais oublier de ne pas faire ça, j'ai toujours un fichier (bien) nommé
mon
fait
chier
qui, avec wc- l, va compter pour 3.
@BrunoL, en effet, le script (tant avec find, qu'avec la boucle for "sur" dotglob) compte les fichiers cachés.
Connected \o/
Welcome to sHell. · eval is evil.
En ligne