ufile: implémenter l'option -r

This commit is contained in:
Jephté Clain 2017-09-22 21:14:16 +04:00
parent 6e8c200803
commit 6ec37f6af4
2 changed files with 25 additions and 9 deletions

View File

@ -1,9 +1,5 @@
# TODO
* ufile: ajouter l'option -r pour classer de façon récursive tous les fichiers
d'un répertoire. cette option est automatiquement activée avec une
confirmation si l'argument est un répertoire.
* ufile: chercher dans le répertoire courant (ou alors, le répertoire du fichier
à classer?) un fichier .ufile.conf qui indique comment classer les fichiers.
Eventuellement, chercher dans l'arborescence jusqu'au répertoire HOME de

30
ufile
View File

@ -37,6 +37,7 @@ forme pattern:destdir[:renamef]
USAGE
$scriptname [options] <files...>
$scriptname [options] -r <files|dirs...>
OPTIONS
-c, --config CONFIG
@ -56,6 +57,9 @@ OPTIONS
Toujours utiliser scp pour une copie distante. Par défaut s'il est
déterminé que l'hôte distant est en réalité l'hôte courant, alors la
copie est effectuée directement.
-r, --recursive
Classer récursivement tous les fichiers d'un répertoire. Sans cette
option, il n'est pas autorisé de fournir un répertoire comme argument.
-n, --fake
Afficher les opérations qui seraient faites
-l, --list
@ -116,6 +120,7 @@ args=(%
--force-cp force_cp=1
-S:,--ssh: SSH=
--force-scp force_scp=1
-r,--recursive recursive=1
-n,--fake fake=1
-l,--list action=list
-e,--edit action=edit
@ -182,13 +187,28 @@ for rule in "${RULES[@]}"; do
fi
done
# faire la liste des fichiers
files=()
for file in "$@"; do
if [ -d "$file" -a -n "$recursive" ]; then
setx file=abspath "$file"
array_from_lines rfiles "$(find "$file" -type f)"
array_extendu files rfiles
elif [ -f "$file" ]; then
setx file=abspath "$file"
array_addu files "$file"
elif [ -n "$fake" ]; then
: # on est en mode fake, pas grave si le fichier n'est pas trouvé
elif [ -d "$file" ]; then
eerror "$file: est un répertoire. essayez avec -r"
else
eerror "$file: fichier introuvable. il sera ignoré"
fi
done
# faire le classement effectif
r=
for file in "$@"; do
[ -f "$file" -o -n "$fake" ] || {
eerror "$file: fichier introuvable. il sera ignoré"
continue
}
for file in "${files[@]}"; do
setx pf=abspath "$file"
setx dir=dirname -- "$pf"
setx filename=basename -- "$pf"