Parcourir une arborescence et la mettre en forme, ou tree sans tree

Après les pérégrinations autour de awk utilisons le tout pour mettre en forme une arborescence et en afficher les attributs voulus. A base de awk et sed \o/

find /path -type d -exec ls -ld {} \; | awk '{ DIR=""
if (NF>9)
{
    for (i=NF;i<=NF;i++)
    {
        DIR=DIR" "$i
    }
}
else
{
    DIR=$9
}
printf("%s [Usr: %s, Grp: %s]\n", DIR, $3, $4)}' | \
sed 's/[^/]*\//|   /g;s/| *\([^| ]\)/+--- \1/'

Ce qui nous donne un résultat pour /var/log par exemple :

|   +--- log [Usr: root, Grp: root]
|   |   +--- gdm [Usr: root, Grp: gdm]
|   |   +--- sssd [Usr: root, Grp: root]
|   |   +--- glusterfs [Usr: root, Grp: root]
|   |   +--- minidlna [Usr: minidlna, Grp: minidlna]
|   |   +--- libvirt [Usr: root, Grp: root]
|   |   |   +--- libxl [Usr: root, Grp: root]
|   |   +--- tomcat [Usr: root, Grp: tomcat]
|   |   +--- sa [Usr: root, Grp: root]
|   |   +--- chrony [Usr: chrony, Grp: chrony]
|   |   +--- redis [Usr: redis, Grp: root]
|   |   +--- upgrade.journal [Usr: root, Grp: root]
|   |   |   +--- 133cff700ccf4d6e871cfdcf772fdb4f [Usr: root, Grp: root]
|   |   |   +--- 9e3d4b6532ff41e1ab40d6b4e5609907 [Usr: root, Grp: root]
|   |   +--- httpd [Usr: root, Grp: root]
|   |   +--- ceph [Usr: root, Grp: root]
|   |   +--- samba [Usr: root, Grp: root]
|   |   |   +--- old [Usr: root, Grp: root]
|   |   |   +--- cores [Usr: root, Grp: root]
|   |   |   |   +--- smbd [Usr: root, Grp: root]
|   |   |   |   +--- nmbd [Usr: root, Grp: root]
|   |   |   |   +--- winbindd [Usr: root, Grp: root]
|   |   +--- anaconda [Usr: root, Grp: root]
|   |   +--- audit [Usr: root, Grp: root]
|   |   +--- ppp [Usr: root, Grp: root]
|   |   +--- cups [Usr: lp, Grp: sys]
|   |   +--- mongodb [Usr: mongodb, Grp: root]
|   |   +--- mail [Usr: root, Grp: root]
|   |   +--- prelink [Usr: root, Grp: root]

Si jamais vous êtes en galère de tree, cela peut vous servir :)

Posted Tuesday, February 5th, 2013 under Linux world, Shell, Tips&Tricks.

Leave a Reply