ajouter filterf

This commit is contained in:
Jephté Clain 2025-09-08 13:08:55 +04:00
parent 90f92c74a3
commit 88e6b9b92f
2 changed files with 76 additions and 0 deletions

66
bin/filterf Executable file
View File

@ -0,0 +1,66 @@
#!/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
}
chdir=
lsdirs=
lsfiles=
dir=
file=
link=
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"
-d,--dir . "garder uniquement les répertoires"
-f,--file . "garder uniquement les fichiers"
-L,--link . "garder uniquement les liens symboliques"
-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
[ -n "$lsdirs" -o -n "$lsfiles" ] || {
lsdirs=1
lsfiles=1
}
if [ -n "$lsdirs" -a -n "$lsfiles" ]; then
cmd="{ $(qvals ls_dirs . "$@"); $(qvals ls_files . "$@"); }"
elif [ -n "$lsdirs" ]; then
cmd="$(qvals ls_dirs . "$@")"
elif [ -n "$lsfiles" ]; then
cmd="$(qvals ls_files . "$@")"
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 "$exists" ] && cmd="$cmd | filter_arg $inverse -e"
[ -n "$nonzero" ] && cmd="$cmd | filter_arg $inverse -s"
eval "$cmd"

10
wip/TEMPLATE Executable file
View File

@ -0,0 +1,10 @@
#!/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
args=(
"description"
"usage"
)
parse_args "$@"; set -- "${args[@]}"