From 88e6b9b92fb8b77857b017dc0b13b87e2d4d1f9e Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Mon, 8 Sep 2025 13:08:55 +0400 Subject: [PATCH] ajouter filterf --- bin/filterf | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++ wip/TEMPLATE | 10 ++++++++ 2 files changed, 76 insertions(+) create mode 100755 bin/filterf create mode 100755 wip/TEMPLATE diff --git a/bin/filterf b/bin/filterf new file mode 100755 index 0000000..e8f602a --- /dev/null +++ b/bin/filterf @@ -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" diff --git a/wip/TEMPLATE b/wip/TEMPLATE new file mode 100755 index 0000000..c46b7c5 --- /dev/null +++ b/wip/TEMPLATE @@ -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[@]}" +