ajouter filterf
This commit is contained in:
parent
90f92c74a3
commit
88e6b9b92f
66
bin/filterf
Executable file
66
bin/filterf
Executable 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
10
wip/TEMPLATE
Executable 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[@]}"
|
||||
|
Loading…
x
Reference in New Issue
Block a user