Je suis conditionné à la ll
qui est un alias de la commande ls -alF
. Il manque juste le nombre de fichiers et leur taille en bas de l'écran. J'ai joué avec du
y tree
mais je n'ai pas pu obtenir les totaux dont j'avais besoin. J'ai donc créé lll
pour faire ça pour moi.
Dans votre ~/.bashrc
placer les éléments suivants :
lll () {
ls -alF "$@"
arr=($(ls -alF "$@" | awk '{TOTAL+=$5} END {print NR, TOTAL}'))
printf " \33[1;31m ${arr[0]}\33[m line(s). "
printf "Total size: \33[1;31m ${arr[1]}\33[m\n"
# printf "Total size: \33[1;31m $(BytesToHuman <<< ${arr[1]})\33[m\n"
}
Sauvegarder le fichier et l'utiliser comme ressource en utilisant . ~/.bashrc
(ou vous pouvez redémarrer votre terminal).
Exemple de sortie
Ce qui est bien avec ll
La sortie est ses couleurs. Ceci est maintenu avec lll
mais perdue lors de l'utilisation de find
ou du
:
TL;DR
Une fonction bonus que vous pouvez ajouter à ~/.bashrc
s'appelle BytesToHuman()
. Il fait ce que la plupart des utilisateurs de consoles attendent, à savoir convertir les grands nombres en MiB, GiB, etc :
function BytesToHuman() {
# https://unix.stackexchange.com/questions/44040/a-standard-tool-to-convert-a-byte-count-into-human-kib-mib-etc-like-du-ls1/259254#259254
read StdIn
b=${StdIn:-0}; d=''; s=0; S=(Bytes {K,M,G,T,E,P,Y,Z}iB)
while ((b > 1024)); do
d="$(printf ".%02d" $((b % 1024 * 100 / 1024)))"
b=$((b / 1024))
let s++
done
echo "$b$d ${S[$s]}"
} # BytesToHuman ()
Retournez ensuite le commentaire entre deux lignes dans lll ()
pour ressembler à ceci :
# printf "Total size: \33[1;31m ${arr[1]}\33[m\n"
printf "Total size: \33[1;31m $(BytesToHuman <<< ${arr[1]})\33[m\n"
Maintenant, votre sortie ressemble à ceci :
Comme toujours, n'oubliez pas de re-sourcer avec . ~/.bashrc
chaque fois que vous effectuez des modifications. (Ou redémarrer le terminal bien sûr)
PS - Deux semaines d'autoquarantaine m'ont finalement donné le temps de travailler sur cet objectif vieux de cinq ans.