#!/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"