nulib/bash/src/base.tools.sh

102 lines
2.9 KiB
Bash

# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
##@cooked nocomments
module: base.tools "Fonctions de base: outils divers"
function: mkdirof 'Créer le répertoire correspondant au fichier $1'
function mkdirof() {
mkdir -p "$(dirname -- "$1")"
}
function __la_cmd() {
[ $# -gt 0 ] || set '*'
local arg
local cmd="/bin/ls -1d"
for arg in "$@"; do
arg="$(qwc "$arg")"
cmd="$cmd $arg"
done
cmd="$cmd 2>/dev/null"
echo "$cmd"
}
function: ls_all 'Lister les fichiers ou répertoires du répertoire $1, un par ligne
Les répertoires . et .. sont enlevés de la liste
$1=un répertoire dont le contenu doit être listé
$2..@=un ensemble de patterns pour le listage
Seuls les noms des fichiers sont listés. Utiliser l'\''option -p pour inclure
les chemins'
function ls_all() {
local withp f b
if [ "$1" == -p ]; then withp=1; shift; fi
b="${1:-.}"; shift
(
cd "$b" || exit
eval "$(__la_cmd "$@")" | while read f; do
[ "$f" == "." -o "$f" == ".." ] && continue
recho "${withp:+$b/}$f"
done
)
}
function: ls_files 'Lister les fichiers du répertoire $1, un par ligne
$1=un répertoire dont le contenu doit être listé.
$2..@=un ensemble de patterns pour le listage
Seuls les noms des fichiers sont listés. Utiliser l'\''option -p pour inclure
les chemins'
function ls_files() {
local withp f b
if [ "$1" == -p ]; then withp=1; shift; fi
b="${1:-.}"; shift
(
cd "$b" || exit
eval "$(__la_cmd "$@")" | while read f; do
[ -f "$f" ] && recho "${withp:+$b/}$f"
done
)
}
function: ls_dirs 'Lister les répertoires du répertoire $1, un par ligne
Les répertoires . et .. sont enlevés de la liste
$1=un répertoire dont le contenu doit être listé.
$2..@=un ensemble de patterns pour le listage
Seuls les noms des répertoires sont listés. Utiliser l'\''option -p pour
inclure les chemins'
function ls_dirs() {
local withp f b
if [ "$1" == -p ]; then withp=1; shift; fi
b="${1:-.}"; shift
(
cd "$b" || exit
eval "$(__la_cmd "$@")" | while read f; do
[ "$f" == "." -o "$f" == ".." ] && continue
[ -d "$f" ] && recho "${withp:+$b/}$f"
done
)
}
function: quietgrep "tester la présence d'un pattern dans un fichier en mode silencieux"
function quietgrep() { grep -q "$@" 2>/dev/null; }
function: testsame "tester si deux fichiers sont identiques en mode silencieux"
function testsame() { diff -q "$@" >&/dev/null; }
function: testdiff "tester si deux fichiers sont différents en mode silencieux"
function testdiff() { ! diff -q "$@" >&/dev/null; }
function: should_update "faut-il mettre à jour le \$1 qui est construit à partir de \$2..@"
function should_update() {
local dest="$1"; shift
local source
for source in "$@"; do
[ -f "$source" ] || continue
[ "$source" -nt "$dest" ] && return 0
done
return 1
}