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