fndate: améliorer l'ergonomie de l'option -@

This commit is contained in:
Jephté Clain 2017-04-21 16:32:54 +04:00
parent 5b0f13dde1
commit 8ce9821095
1 changed files with 29 additions and 0 deletions

29
fndate
View File

@ -63,6 +63,14 @@ OPTIONS
Dans le nom spécifié, si la date est déjà présente, forcer son
remplacement par la valeur spécifiée. Par défaut, le fichier n'est pas
modifié si la date est déjà présente.
S'il y a au moins 2 arguments et si le premier ou le dernier argument
ressemblent à une date (ie. d/m[/y] ou @d[/m[/y]]) et qu'aucun fichier
de ce nom n'existe dans le répertoire courant, activer automatiquement
cette option, sauf si l'option --no-auto-force-date est spécifié aussi.
Les commandes suivantes sont équivalentes:
$scriptname -@ d/m/y file
$scriptname d/m/y file
$scriptname file @d/m/y
-F, --format FORMAT
Spécifier le format de la date à insérer dans le nom du fichier. Par
défaut, FORMAT vaut 'YYMMDD-'
@ -227,6 +235,7 @@ dmove) action=move;;
dcmd) action=cmd;;
esac
placeholder=
auto_force_date=1
force_date=
format=
autof=
@ -240,6 +249,7 @@ parse_opts "${PRETTYOPTS[@]}" \
-c,--cmd action=cmd \
--string action=string \
-P:,--placeholder: placeholder= \
--no-auto-force-date auto_force_date= \
-@:,--force-date: force_date= \
-F:,--format: format= \
-s,--short '$format=YYMMDD; autof=1' \
@ -247,6 +257,25 @@ parse_opts "${PRETTYOPTS[@]}" \
--autof autof=1 \
@ args -- "$@" && set -- "${args[@]}" || die "$args"
if [ $# -gt 1 -a -z "$force_date" -a -n "$auto_force_date" ]; then
# si le premier ou le dernier argument ressemblent à une date
f="$1"; f2="${f#@}"
l="${@:$#}"; l2="${l#@}"
if [[ "$f" == */* ]] && [ -z "${f//[0-9\/]}" -a ! -e "$f" ]; then
force_date="$f"
shift
elif [[ "$f" == @* ]] && [ -z "${f2//[0-9\/]}" -a ! -e "$f2" ]; then
force_date="$f2"
shift
elif [[ "$l" == */* ]] && [ -z "${l//[0-9\/]}" -a ! -e "$l" ]; then
force_date="$l"
set -- "${@:1:$(($# - 1))}"
elif [[ "$l" == @* ]] && [ -z "${l2//[0-9\/]}" -a ! -e "$l2" ]; then
force_date="$l2"
set -- "${@:1:$(($# - 1))}"
fi
fi
[ -n "$create" ] || create=file
[ -n "$placeholder" ] || placeholder="~~"
[ -n "$force_date" ] && setx force_date=parse_date "$force_date"