fdu

un du un peu interactif grâce à fzy - retour accueil

git clone git://bebou.netlib.re/fdu
Log | Files | Refs | README |

fdu.sh (1527B)


      1 #! /bin/sh
      2 
      3 VERSION="0.2"
      4 
      5 help() <<\% cat
      6 Un du un peu interactif pour un semblant de qdirstat (ou ncdu etc)
      7 
      8 Usage : fdu [-hv] [-c commande] [chemin]
      9 
     10 Le chemin par défaut est le repertoire courant
     11 
     12 Naviguez dans la liste avec les flèches
     13 Sélectionnez un élément avec la touche entrée
     14 Si un dossier est sélectionné fdu analysera le contenu du dossier
     15 Si un fichier est sélectionné il terminera (pour le moment)
     16 
     17 Exemples :
     18 
     19     $ fdu
     20 
     21 analyser le dossier courant
     22 
     23     $ fdu ~
     24 
     25 analyser votre home
     26 %
     27 
     28 tmpd=$(mktemp -d)
     29 trap "rm -rf $tmpd;exit 0" INT QUIT EXIT
     30 
     31 echo "a" | fzy -m -e "a" 2>&1 | grep "invalid option -- 'm'" \
     32 	&& multi="no" \
     33 	|| multi="yes"
     34 echo "$multi"
     35 
     36 while getopts "hvc:" opt; do
     37 	case $opt in
     38 		( c ) [ ! -z $OPTARG ] && eval "$opt='$OPTARG'" ;;
     39 		( v ) printf "%s\n" "$VERSION"; exit ;;
     40 		( h ) help;                     exit ;;
     41   esac
     42 done
     43 shift $((OPTIND - 1))
     44 
     45 cur=$(cd "${1:-.}" && pwd)
     46 while [ "$cur" != "quit" ];do
     47 	tmpf=$(printf "%s" "$cur" | tr '/' '-')
     48 
     49 	if [ -f "$tmpd/$tmpf" ]; then
     50 		list=$(cat "$tmpd/$tmpf")
     51 	else
     52 		list=$(du -a -d 1 -h "$cur" | sort -hr | sed -E "s,.*	$cur$,,")
     53 		printf "%s" "$list" > $tmpd/$tmpf
     54 	fi
     55 
     56 	[ "$multi" = "yes" ] \
     57 		&& cur=$(printf "quit\nprev	%s\n%s" "${cur%/*}" "$list" | fzy -m -l 20 | cut -f2) \
     58 		|| cur=$(printf "quit\nprev	%s\n%s" "${cur%/*}" "$list" | fzy -l 20 | cut -f2)
     59 
     60 
     61 	if [ -f "$cur" ];then
     62 		cmd=$(eval "echo $cur | xargs echo $cmd")
     63 		read -p "Execute \"$cmd\" ? (y/N)  " a
     64 		[ "$a" = "y" ] && eval "$cmd"
     65 		cur=${cur%/*}
     66 	fi
     67 done