ufile: classement automatique de fichiers
This commit is contained in:
parent
540e718180
commit
a99f313014
|
@ -0,0 +1,11 @@
|
|||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
|
||||
# règles pour le classement des fichiers. chaque règle est de la forme
|
||||
# pattern:destdir[:renamef]
|
||||
# renamef est une fonction qui permet de supporter le renommage d'un fichier
|
||||
# lors de son classement. Sa signature est 'renamef filename pf destdir' où
|
||||
# filename est le nom du fichier source, pf son chemin complet et destdir la
|
||||
# valeur de destdir mentionnée dans la règle. La fonction doit afficher le
|
||||
# nouveau nom. Si le nouveau nom contient un chemin, destdir est ignoré et le
|
||||
# fichier est déplacé dans le répertoire spécifié.
|
||||
RULES=()
|
|
@ -0,0 +1,76 @@
|
|||
#!/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
|
||||
set_defaults ufile
|
||||
|
||||
function display_help() {
|
||||
uecho "$scriptname: classer des fichiers selon certains règles
|
||||
|
||||
Les règles sont dans le fichier ~/etc/default/ufile
|
||||
Consulter ce fichier pour les détails
|
||||
|
||||
USAGE
|
||||
$scriptname [options] <files...>
|
||||
|
||||
OPTIONS
|
||||
-n, --fake
|
||||
Afficher les opérations qui seraient faites"
|
||||
}
|
||||
|
||||
args=(%
|
||||
--help '$exit_with display_help'
|
||||
-n,--fake fake=1
|
||||
)
|
||||
parse_args "$@"; set -- "${args[@]}"
|
||||
|
||||
if [ -n "$fake" ]; then
|
||||
function docmd() { qvals "$@"; }
|
||||
else
|
||||
function docmd() { "$@"; }
|
||||
fi
|
||||
|
||||
[ $# -gt 0 ] || die "Vous devez spécifier des fichiers à classer"
|
||||
[ ${#RULES[*]} -gt 0 ] || die "Vous devez spécifier des règles pour le classement des fichiers dans ~/default/ufile"
|
||||
|
||||
for file in "$@"; do
|
||||
[ -f "$file" -o -n "$fake" ] || {
|
||||
eerror "$file: fichier introuvable. il sera ignoré"
|
||||
continue
|
||||
}
|
||||
setx pf=abspath "$file"
|
||||
setx dir=dirname "$pf"
|
||||
setx filename=basename "$pf"
|
||||
found=
|
||||
for rule in "${RULES[@]}"; do
|
||||
splitpair "$rule" pattern r2
|
||||
splitpair "$r2" destdir r3
|
||||
splitpair "$r3" renamef r4
|
||||
if [ "${destdir#"~/"}" != "$destdir" ]; then
|
||||
destdir="$HOME/${destdir#"~/"}"
|
||||
elif [ "${destdir#/}" == "$destdir" ]; then
|
||||
die "règle '$rule' invalide: destdir doit être absolu"
|
||||
fi
|
||||
if eval "[[ \"\$filename\" == $(qwc "$pattern") ]]"; then
|
||||
if [ -n "$renamef" ]; then
|
||||
setx newname="$renamef" "$filename" "$pf" "$destdir"
|
||||
if [[ "$newname" == */* ]]; then
|
||||
splitpath "$newname" destdir destname
|
||||
else
|
||||
destname="$newname"
|
||||
fi
|
||||
else
|
||||
newname="$filename"
|
||||
fi
|
||||
estep "$filename --> $destdir/$destname"
|
||||
ask_yesno -i "Voulez-vous continuer?" O || { found=x; break; }
|
||||
docmd mkdir -p "$destdir" || die "$destdir: impossible de créer le répertoire"
|
||||
docmd mv -i "$file" "$destdir/$destname" || die "problème lors du déplacement du fichier"
|
||||
found=1
|
||||
break
|
||||
fi
|
||||
done
|
||||
if [ -z "$found" ]; then
|
||||
ewarn "$file: aucune correspondance n'a été trouvée"
|
||||
fi
|
||||
done
|
Loading…
Reference in New Issue