reginc: possibilité de renommer des fichiers

This commit is contained in:
Jephté Clain 2024-06-17 10:44:53 +04:00
parent 1787aa2310
commit e4176dfd94
1 changed files with 94 additions and 45 deletions

139
reginc
View File

@ -12,62 +12,111 @@ remplacer les nombres de FROMmin à FROMmax par leur valeur correspondante,
sachant que FROMmin doit être remplacé par TO. On peut mentionner autant de sachant que FROMmin doit être remplacé par TO. On peut mentionner autant de
couples (FROM, TO) que nécessaire: ils seront traités dans l'ordre couples (FROM, TO) que nécessaire: ils seront traités dans l'ordre
$scriptname -r FROMmin-FROMmax TO FILEs...
renommer les fichiers en remplaçant les nombres de FROMmin à FROMmax par leur
valeur correspondante, sachant que FROMmin doit être remplacé par TO
OPTIONS OPTIONS
-n, --fake -n, --fake
Afficher le fichier tel qu'il serait modifié au lieu de le modifier en Afficher le fichier tel qu'il serait modifié au lieu de le modifier en
place" place
-r, --rename
Renommer les fichiers au lieu de modifier le texte à l'intérieur du
fichier. Attention, l'ordre des arguments est différent avec cette
option"
} }
fake= function process_file() {
local file from to fromb frome seds r
file="$1"; shift
[ -n "$file" ] || die "vous devez spécifier le fichier à modifier"
seds=
while [ $# -ge 2 ]; do
from="$1"
if [[ "$from" == *-* ]]; then
let fromb="${from%-*}"
let frome="${from#*-}"
else
let fromb="$from"
let frome="$from"
fi
let to="$2"; shift 2
if [ "$to" -eq "$fromb" ]; then
einfo "$fromb --> $to aucune modification n'est nécessaire"
elif [ "$to" -lt "$fromb" ]; then
einfo "$fromb-$frome --> $to-$((to+frome-fromb))"
let from=fromb
while [ "$from" -le "$frome" ]; do
seds="$seds${seds:+; }s/$from/$to/g"
let from=from+1
let to=to+1
done
elif [ "$to" -gt "$fromb" ]; then
einfo "$frome-$fromb --> $((to+frome-fromb))-$to"
let from=frome
let to=to+frome-fromb
while [ "$from" -ge "$fromb" ]; do
seds="$seds${seds:+; }s/$from/$to/g"
let from=from-1
let to=to-1
done
fi
done
edebug "Script sed: $seds"
[ -n "$Fake" ] && args=() || args=(-i)
args+=("$seds" "$file")
sed "${args[@]}"; r=$?
[ -z "$Fake" -a $r -eq 0 ]
}
Fake=
rename=
args=( args=(
--help '$exit_with display_help' --help '$exit_with display_help'
-n,--fake fake=1 -n,--Fake Fake=1
-r,--rename rename=1
) )
parse_args "$@"; set -- "${args[@]}" parse_args "$@"; set -- "${args[@]}"
file="$1"; shift if [ -n "$rename" ]; then
[ -n "$file" ] || die "vous devez spécifier le fichier à modifier" from="$1"; to="$2"; shift 2
seds= froms=("$@")
while [ $# -ge 2 ]; do ac_set_tmpfile tmptos
from="$1" echo "tos=(" >>"$tmptos"
if [[ "$from" == *-* ]]; then for file in "${froms[@]}"; do
let fromb="${from%-*}" qval "$file" >>"$tmptos"
let frome="${from#*-}" done
else echo ")" >>"$tmptos"
let fromb="$from"
let frome="$from"
fi
let to="$2"; shift 2
if [ "$to" -eq "$fromb" ]; then Fake= process_file "$tmptos" "$from" "$to"
einfo "$fromb --> $to aucune modification n'est nécessaire" eval "$(<"$tmptos")"
elif [ "$to" -lt "$fromb" ]; then i=0
einfo "$fromb-$frome --> $to-$((to+frome-fromb))" count=${#froms[*]}
while [ $i -lt $count ]; do
from="${froms[$i]}"
to="${tos[$i]}"
if [ "$to" == "$from" ]; then
ewarn "$from: renommage non nécessaire"
else
estep "$from --> $to"
[ -z "$Fake" ] && mv "$from" "$to"
fi
let i=i+1
done
let from=fromb else
while [ "$from" -le "$frome" ]; do process_file "$@"
seds="$seds${seds:+; }s/$from/$to/g" fi
let from=from+1
let to=to+1
done
elif [ "$to" -gt "$fromb" ]; then
einfo "$frome-$fromb --> $((to+frome-fromb))-$to"
let from=frome
let to=to+frome-fromb
while [ "$from" -ge "$fromb" ]; do
seds="$seds${seds:+; }s/$from/$to/g"
let from=from-1
let to=to-1
done
fi
done
edebug "Script sed: $seds"
[ -n "$fake" ] && args=() || args=(-i)
args+=("$seds" "$file")
sed "${args[@]}"