diff --git a/fndate b/fndate index 5002945..78faa74 100755 --- a/fndate +++ b/fndate @@ -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"