Jak odstranit diakritiku z názvu souborů

Potřeboval jsem odstranit diakritiku z názvů souborů. Pod winxp s cygwinem (tr viz dále nefungoval a o příkazu unaccent jsem nevěděl). PS: Filtruji .svn adresáře. S unaccent by to bylo asi výrazně rychlejší. IFS je asi zbytečné. Umí si poradit s duplicitami. Adresáře neřeší.

Výsledek vypadá takto:

#!/bin/bash

srcenc=cp1250

SAVEIFS=$IFS
IFS=$(echo -en “\n\b”)

if [ $# -eq 0 ];then
  echo “Usage: $0 directory …”
else
  while [ $# -gt 0 ];do
    if [ -d “$1” ];then
      find “$1” -mindepth 1 -maxdepth 1 -type f | grep -v “.svn” | while read name;do
        echo “INFO: Filename - $name”
        nname=”$(iconv -f “$srcenc” -t “ascii//TRANSLIT” <<< “$name” )”
        nname=”$(echo “$nname” | sed -e “s/’//g” )”
        if [ “$name” != “$nname” ];then
          if [ -e “$nname” ];then
            echo “WARNING: Filename already exist - $nname”
            i=0
            oname=”$nname”
            while [ -e “$nname” ];do nname=”$( printf “%s.%05i” “$oname” $i )”;i=$(($i+1));done
          fi
          svn rename “$name” “$nname”
        fi
      done
      find “$1” -mindepth 1 -maxdepth 1 -type d -print0 | xargs -0r “$0” | sed -e “s:[-a-zA-Z0-9_/. \]*.svn ::g”
      shift
    else
      echo “Directory $1 does not exist”
    fi
  done
fi


# restore $IFS
 IFS=$SAVEIF

Jiné a podobné možnosti:

TR

#n=”$( echo “$name” | tr — ’ĄąÁÂĂÄáâăäĆÇČćçčĎĐďđÉĘËĚéęëěÍÎíłľĹĺŃŇńňÓÔŐÖóôőöŔŕŘřŚŠŞśšşŤťŢţŮÚŰÜůúűüÝýŹŽŻźžż’\

AaAAAAaaaaCCCcccDDddEEEEeeeeIIiiLLllLlNNnnOOOOooooRrRrSSSsssTtTtUUUUuuuuYyZZZzzz’ \

| tr -cs — ‘-0-9a-zA-Z_.\/’ ‘_’ \

| tr -s — ‘-_’ ‘-_’ | sed -e ‘s/^[-_]+//’ -e ‘s/[-_]*-[-_]*/-/g’ -e ‘s/[-_]+././g’ -e ‘s/.[-_]+/./g;’ )”

SED

nname=”$( echo “$name” | sed ‘y/ĄąÁÂĂÄáâăäĆÇČćçčĎĐďđÉĘËĚéęëěÍÎíłľĹĺŃŇńňÓÔŐÖóôőöŔŕŘřŚŠŞśšşŤťŢţŮÚŰÜůúűüÝýŹŽŻźžż\x9D\x9A\x9E\x8D\x8A\x8E/ AaAAAAaaaaCCCcccDDddEEEEeeeeIIiiLLllLlNNnnOOOOooooRrRrSSSsssTtTtUUUUuuuuYyZZZzzztszTSZ/; y/A-Z/a-z/;y/-0-9a-z_./_/cs;y/-_/-_/s;s/^[-_]\+//;s/[-_]*-[-_]*/-/g;s/[-_]\+.\/./g;s/.[-_]\+/./g;’ )”

sed -e ‘y/ščř/scr/;y/-0-9a-z_./_/cs’

Zdroj a inspirace:

http://www.abclinuxu.cz/blog/Tomik/2007/11/uzitecne-skripty-7-hromadne-prejmenovani-souboru/diskuse