ajouter fndate pour dater les fichiers
This commit is contained in:
parent
8143452c1b
commit
9fe71b3e11
|
@ -0,0 +1,227 @@
|
|||
#!/bin/bash
|
||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||
urequire DEFAULTS
|
||||
|
||||
function display_help() {
|
||||
uecho "$scriptname: manipuler des noms de fichier pour les dater
|
||||
|
||||
USAGE
|
||||
$scriptname (FILE|DIR)s...
|
||||
$scriptname -k SRCs... [DESTDIR]
|
||||
$scriptname -m SRCs... [DESTDIR]
|
||||
$scriptname -c COMMAND [ARGs...]
|
||||
|
||||
OPTIONS
|
||||
--create-or-rename
|
||||
Créer un nouveau fichier (option -f) ou créer un nouveau répertoire
|
||||
(option -d), ou renommer un fichier existant sans le changer de
|
||||
répertoire. C'est l'option par défaut.
|
||||
-f, --create-file
|
||||
Créer un nouveau fichier. Cette option est ignorée si le fichier ou le
|
||||
répertoire spécifié existe. C'est la valeur par défaut
|
||||
-d, --create-dir
|
||||
Créer un nouveau répertoire. Cette option est ignorée si le fichier ou
|
||||
le répertoire spécifié existe.
|
||||
-k, --copy
|
||||
Copier le fichier SRC vers la destination DESTDIR qui vaut par défaut le
|
||||
répertoire courant si un seul fichier source est spécifié. Si plusieurs
|
||||
fichiers sources sont spécifiés, il faut absolument spécifier un
|
||||
répertoire destination. Dans la destination, les fichiers sont nommés
|
||||
avec la date en préfixe.
|
||||
-m, --move
|
||||
Déplacer le fichier SRC vers la destination DESTDIR qui vaut par défaut
|
||||
le répertoire courant si un seul fichier source est spécifié. Si
|
||||
plusieurs fichiers sources sont spécifiés, il faut absolument spécifier
|
||||
un répertoire destination. Dans la destination, les fichiers sont nommés
|
||||
avec la date en préfixe.
|
||||
-c, --cmd
|
||||
Les arguments sont une commande à lancer. Dans les argument, PLACEHOLDER
|
||||
est remplacé par la date. Si le PLACEHOLDER n'est trouvé dans aucun des
|
||||
arguments, alors ajouter la date à la fin de la commande. Par exemple,
|
||||
voici comment émuler l'option -k
|
||||
$scriptname -c cp src dest/~~
|
||||
-P, --placeholder PLACEHOLDER
|
||||
Dans le nom spécifié, remplacer PLACEHOLDER par la date. Par défaut,
|
||||
PLACEHOLDER vaut ~~. Si le nom spécifié ne contient pas le PLACEHOLDER,
|
||||
il est placé au début.
|
||||
-F, --format FORMAT
|
||||
Spécifier le format de la date à insérer dans le nom du fichier. Par
|
||||
défaut, FORMAT vaut 'YYMMDD-'
|
||||
Les formats valides sont:
|
||||
YYYY année sur 4 chiffres
|
||||
YY année sur 2 chiffres
|
||||
MM mois sur 2 chiffres
|
||||
DD jour sur 2 chiffres
|
||||
Tous les autres caractères sont pris tels-quels"
|
||||
}
|
||||
|
||||
function create() {
|
||||
case "$create" in
|
||||
file) touch "$1";;
|
||||
dir) mkdir -p "$1";;
|
||||
esac
|
||||
}
|
||||
function have_ph() {
|
||||
[[ "$1" == *"$placeholder"* ]]
|
||||
}
|
||||
function replace_ph() {
|
||||
awkrun ph="$placeholder" format="$format" autof:int="$autof" '
|
||||
BEGIN {
|
||||
gsub(/%/, "%%", format)
|
||||
gsub(/YYYY/, "%Y", format)
|
||||
gsub(/YY/, "%y", format)
|
||||
gsub(/MM/, "%m", format)
|
||||
gsub(/DD/, "%d", format)
|
||||
date = strftime(format)
|
||||
}
|
||||
{
|
||||
if (index($0, "/") != 0) {
|
||||
match($0, /\/[^/]*$/)
|
||||
dir = substr($0, 1, RSTART)
|
||||
name = substr($0, RSTART + 1)
|
||||
} else {
|
||||
dir = ""
|
||||
name = $0
|
||||
}
|
||||
|
||||
if (autof) {
|
||||
pos = index(name, ph)
|
||||
if (pos == 0) {
|
||||
print dir date "-" name
|
||||
} else if (pos == 1) {
|
||||
print dir date "-" substr(name, length(ph) + 1)
|
||||
} else if (pos == length(name) - length(ph) + 1) {
|
||||
print dir substr(name, 1, length(name) - length(ph)) "-" date
|
||||
} else {
|
||||
print dir substr(name, 1, pos - 1) date substr(name, pos + length(ph))
|
||||
}
|
||||
} else {
|
||||
pos = index(name, ph)
|
||||
if (pos == 0) {
|
||||
print dir date name
|
||||
} else {
|
||||
print dir substr(name, 1, pos - 1) date substr(name, pos + length(ph))
|
||||
}
|
||||
}
|
||||
}' <<<"$1"
|
||||
}
|
||||
|
||||
action=create
|
||||
create=
|
||||
placeholder=
|
||||
format=
|
||||
parse_opts "${PRETTYOPTS[@]}" \
|
||||
--help '$exit_with display_help' \
|
||||
--create-or-rename action=create \
|
||||
-d,--create-dir create=dir \
|
||||
-f,--create-file create=file \
|
||||
-k,--copy action=copy \
|
||||
-m,--move action=move \
|
||||
-c,--cmd action=cmd \
|
||||
-P:,--placeholder: placeholder= \
|
||||
-F:,--format: format= \
|
||||
--autof autof=1 \
|
||||
@ args -- "$@" && set -- "${args[@]}" || die "$args"
|
||||
|
||||
[ -n "$create" ] || create=file
|
||||
[ -n "$placeholder" ] || placeholder="~~"
|
||||
if [ -n "$format" ]; then
|
||||
autof=
|
||||
else
|
||||
format=YYMMDD
|
||||
autof=1
|
||||
fi
|
||||
|
||||
if [ "$action" == cmd ]; then
|
||||
# Il faut lancer une commande spécifiée
|
||||
[ $# -gt 0 ] || set -- echo
|
||||
args=()
|
||||
found=
|
||||
for arg in "$@"; do
|
||||
if have_ph "$arg"; then
|
||||
check_interaction -c && evalx qvals "${args[@]}" "$arg" // estepi "Commande:"
|
||||
setx arg=replace_ph "$arg"
|
||||
read_value "Veuillez confirmer le nom" arg "$arg"
|
||||
found=1
|
||||
fi
|
||||
args=("${args[@]}" "$arg")
|
||||
done
|
||||
if [ -z "$found" ]; then
|
||||
setx arg=replace_ph
|
||||
read_value "Veuillez entrer le nom du fichier" arg "$arg"
|
||||
args=("${args[@]}" "$arg")
|
||||
fi
|
||||
|
||||
if show_debug; then
|
||||
evalx qvals "${args[@]}" // edebug "Commande:"
|
||||
ask_yesno "Voulez-vous continuer?" X || die
|
||||
fi
|
||||
"${args[@]}"
|
||||
|
||||
elif [ "$action" == copy -o "$action" == move ]; then
|
||||
if [ $# -eq 0 ]; then
|
||||
die "Vous devez spécifier les fichiers"
|
||||
elif [ $# -eq 1 ]; then
|
||||
src="$1"
|
||||
destdir=.
|
||||
srcs=("$src")
|
||||
else
|
||||
args=("$@")
|
||||
setx destdir=last_value args
|
||||
array_copy_firsts srcs args
|
||||
fi
|
||||
if [ ! -d "$destdir" ]; then
|
||||
ewarn "$destdir: répertoire introuvable"
|
||||
ask_yesno "Voulez-vous le créer?" X || die
|
||||
mkdir -p "$destdir" || die
|
||||
fi
|
||||
if [ "$action" == copy ]; then
|
||||
cmdinfo="Copie"
|
||||
cmd=(cp -i)
|
||||
elif [ "$action" == move ]; then
|
||||
cmdinfo="Déplacement"
|
||||
cmd=(mv -i)
|
||||
fi
|
||||
for src in "${srcs[@]}"; do
|
||||
setx srcname=basename -- "$src"
|
||||
if [ -e "$src" ]; then
|
||||
einfo "$cmdinfo de $(ppath "$src")"
|
||||
setx destname=replace_ph "$srcname"
|
||||
read_value "Veuillez confirmer le nom" destname "$destname"
|
||||
"${cmd[@]}" "$src" "$destdir/$destname"
|
||||
else
|
||||
ewarn "$src: fichier introuvable"
|
||||
fi
|
||||
done
|
||||
|
||||
elif [ "$action" == create ]; then
|
||||
if [ $# -gt 0 ]; then
|
||||
for src in "$@"; do
|
||||
setx dir=dirname -- "$src"
|
||||
setx srcname=basename -- "$src"
|
||||
if [ -e "$src" ]; then
|
||||
einfo "Renommage de $(ppath "$src")"
|
||||
setx destname=replace_ph "$srcname"
|
||||
read_value "Veuillez confirmer le nom" destname "$destname"
|
||||
mv -i "$src" "$dir/$destname"
|
||||
else
|
||||
einfo "Création de $(ppath "$src")"
|
||||
setx destname=replace_ph "$srcname"
|
||||
read_value "Veuillez confirmer le nom" destname "$destname"
|
||||
create "$dir/$destname"
|
||||
fi
|
||||
done
|
||||
else
|
||||
case "$create" in
|
||||
file) einfo "Création d'un nouveau fichier";;
|
||||
dir) einfo "Création d'un nouveau répertoire";;
|
||||
esac
|
||||
setx destname=replace_ph
|
||||
read_value "Veuillez entrer le nom" destname "$destname"
|
||||
create "$destname"
|
||||
fi
|
||||
|
||||
else
|
||||
die "$action: action non implémentée"
|
||||
fi
|
Loading…
Reference in New Issue