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 # 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 * 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. à classer?) un fichier .ufile.conf qui indique comment classer les fichiers.
Eventuellement, chercher dans l'arborescence jusqu'au répertoire HOME de Eventuellement, chercher dans l'arborescence jusqu'au répertoire HOME de

30
ufile
View File

@ -37,6 +37,7 @@ forme pattern:destdir[:renamef]
USAGE USAGE
$scriptname [options] <files...> $scriptname [options] <files...>
$scriptname [options] -r <files|dirs...>
OPTIONS OPTIONS
-c, --config CONFIG -c, --config CONFIG
@ -56,6 +57,9 @@ OPTIONS
Toujours utiliser scp pour une copie distante. Par défaut s'il est 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 déterminé que l'hôte distant est en réalité l'hôte courant, alors la
copie est effectuée directement. 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 -n, --fake
Afficher les opérations qui seraient faites Afficher les opérations qui seraient faites
-l, --list -l, --list
@ -116,6 +120,7 @@ args=(%
--force-cp force_cp=1 --force-cp force_cp=1
-S:,--ssh: SSH= -S:,--ssh: SSH=
--force-scp force_scp=1 --force-scp force_scp=1
-r,--recursive recursive=1
-n,--fake fake=1 -n,--fake fake=1
-l,--list action=list -l,--list action=list
-e,--edit action=edit -e,--edit action=edit
@ -182,13 +187,28 @@ for rule in "${RULES[@]}"; do
fi fi
done 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 # faire le classement effectif
r= r=
for file in "$@"; do for file in "${files[@]}"; do
[ -f "$file" -o -n "$fake" ] || {
eerror "$file: fichier introuvable. il sera ignoré"
continue
}
setx pf=abspath "$file" setx pf=abspath "$file"
setx dir=dirname -- "$pf" setx dir=dirname -- "$pf"
setx filename=basename -- "$pf" setx filename=basename -- "$pf"