#!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 function display_help() { uecho "$scriptname: renommer des fichiers en changeant leur encoding USAGE $scriptname [-f src_enc] [ -t dest_enc] [/path/to/file] OPTIONS -f from Encoding source. Si n'est pas spécifié ou vaut 'detect', l'encoding est autodétecté. -t to Encoding destination. Doit être spécifié. -N Ne pas optimiser le calcul de l'encoding. Cette option n'est valide que si -f n'est pas spécifié. On assume que tous les noms de fichiers n'ont pas le même encoding. L'encoding from est donc recalculé à chaque fois. -r inverser from et to, qui doivent être tous les deux spécifiés." } if [ "$#" -eq 1 -a "$1" == --nutools-makelinks ]; then # créer les liens scriptname="$(basename "$0")" for destenc in latin1 utf8; do ln -s "$scriptname" "${scriptname}2$destenc" done exit 0 fi source "$(dirname "$0")/lib/ulib/ulib" || exit 1 urequire DEFAULTS from=detect case "${scriptname#fnconv2}" in utf8) to=utf-8;; latin1) to=iso-8859-1;; *) to=;; esac optimize=1 parse_opts "${PRETTYOPTS[@]}" \ --help '$exit_with display_help' \ -f: from= \ -t: to= \ -N optimize= \ -r reverse \ @ args -- "$@" && set -- "${args[@]}" || die "$args" function fnconv() { # $1 = fichier à renommer local lfrom="$from" lto="$to" local srcdir="$(dirname "$1")" local srcname="$(basename "$1")" if [ "$lfrom" == "detect" ]; then lfrom="$("$scriptdir/lib/pywrapper" uencdetect.py "$srcname")" if [ "$lfrom" == "Unknown" ]; then eerror "$srcname: Impossible de déterminer l'encoding" return 1 fi if [ -n "$optimize" ]; then from="$(__norm_encoding "$lfrom")" [ "$from" != "$to" ] && enote "Conversion $from --> $to" fi fi if [ -n "$optimize" -a "$from" == "$to" ]; then die "Une conversion de $from à $to n'a pas de sens. Veuillez re-essayer avec -N si nécessaire." fi if [ -n "$reverse" ]; then tmp="$lto" lto="$lfrom" lfrom="$tmp" fi local src="$(abspath "$srcdir/$srcname")" local dest dest="$srcdir/$(iconv -f "$lfrom" -t "$lto" <<<"$srcname")" || return 1 dest="$(abspath "$dest")" if [ "$src" != "$dest" ]; then ebegin "$(ppath "$src") --> $(basename "$dest")" \ mv "$src" "$dest" fi src="$dest" if [ -d "$src" ]; then etitle -s "$(ppath "$src")" local subsrcs subsrc array_lsall subsrcs "$src" for subsrc in "${subsrcs[@]}"; do fnconv "$subsrc" done eend fi } [ -n "$to" ] || die "Il faut spécifier l'encoding de destination" to="$(__norm_encoding "$to")" for src in "$@"; do fnconv "$src" done