86 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/bash
 | |
| # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
 | |
| source "$(dirname -- "$0")/../load.sh" || exit 1
 | |
| 
 | |
| function filter_arg() {
 | |
|     local inverse="$1"; shift
 | |
|     while read arg; do
 | |
|         if [ "$inverse" == 0 ]; then
 | |
|             [ $1 "$arg" ] && echo "$arg"
 | |
|         else
 | |
|             [ $1 "$arg" ] || echo "$arg"
 | |
|         fi
 | |
|     done
 | |
| }
 | |
| function filter_broken() {
 | |
|     local inverse="$1"; shift
 | |
|     while read arg; do
 | |
|         [ -L "$arg" ] || continue
 | |
|         if [ "$inverse" == 0 ]; then
 | |
|             [ -e "$arg" ] || echo "$arg"
 | |
|         else
 | |
|             [ -e "$arg" ] && echo "$arg"
 | |
|         fi
 | |
|     done
 | |
| }
 | |
| 
 | |
| chdir=
 | |
| lsdirs=
 | |
| lsfiles=
 | |
| lsnames=
 | |
| dir=
 | |
| file=
 | |
| link=
 | |
| broken=
 | |
| exists=
 | |
| nonzero=
 | |
| inverse=0
 | |
| args=(
 | |
|     "filtrer une liste de fichiers"
 | |
|     "[filter]"
 | |
|     -C:,--chdir chdir= "changer le répertoire courant avant de lister les fichiers"
 | |
|     --lsdirs . "n'afficher que les répertoires du répertoire courant"
 | |
|     --lsfiles . "n'afficher que les fichiers du répertoire courant"
 | |
|     --lsnames . "n'afficher que les noms de fichier"
 | |
|     -d,--dir . "garder uniquement les répertoires"
 | |
|     -f,--file . "garder uniquement les fichiers"
 | |
|     -L,--link . "garder uniquement les liens symboliques"
 | |
|     -b,--broken . "garder uniquement les liens symboliques cassés"
 | |
|     -e,--exists . "garder uniquement les fichiers/répertoires qui existent"
 | |
|     -s,--nonzero . "garder uniquement les fichiers ayant une taille non nulle"
 | |
|     -n,--inverse inverse=1 "inverser le sens du filtre"
 | |
| )
 | |
| parse_args "$@"; set -- "${args[@]}"
 | |
| 
 | |
| if [ -n "$chdir" ]; then
 | |
|     cd "$chdir" || die
 | |
| fi
 | |
| 
 | |
| if in_isatty; then
 | |
|     # lister les fichiers
 | |
|     setx cwd=pwd
 | |
|     [ -n "$lsnames" ] && withpath= || withpath=1
 | |
|     if [ -n "$lsdirs" -a -n "$lsfiles" ]; then
 | |
|         cmd="{
 | |
| $(qvals ls_dirs ${withpath:+-p} "$cwd" "$@")
 | |
| $(qvals ls_files ${withpath:+-p} "$cwd" "$@")
 | |
| }"
 | |
|     elif [ -n "$lsdirs" ]; then
 | |
|         cmd="$(qvals ls_dirs ${withpath:+-p} "$cwd" "$@")"
 | |
|     elif [ -n "$lsfiles" ]; then
 | |
|         cmd="$(qvals ls_files ${withpath:+-p} "$cwd" "$@")"
 | |
|     else
 | |
|         cmd="$(qvals ls_all ${withpath:+-p} "$cwd" "$@")"
 | |
|     fi
 | |
| else
 | |
|     cmd="cat"
 | |
| fi
 | |
| 
 | |
| [ -n "$dir" ] && cmd="$cmd | filter_arg $inverse -d"
 | |
| [ -n "$file" ] && cmd="$cmd | filter_arg $inverse -f"
 | |
| [ -n "$link" ] && cmd="$cmd | filter_arg $inverse -L"
 | |
| [ -n "$broken" ] && cmd="$cmd | filter_broken $inverse"
 | |
| [ -n "$exists" ] && cmd="$cmd | filter_arg $inverse -e"
 | |
| [ -n "$nonzero" ] && cmd="$cmd | filter_arg $inverse -s"
 | |
| eval "$cmd"
 |