101 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/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
 |