nutools/ufile

77 lines
2.4 KiB
Plaintext
Raw Normal View History

#!/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