Portál AbcLinuxu, 19. července 2025 11:18


Dotaz: odstraneni diakritiky v nazvu souboru

5.2.2008 12:19 vepro
odstraneni diakritiky v nazvu souboru
Přečteno: 5259×
Odpovědět | Admin
Potreboval bych poradit nejaky bashovsky skript, ktery by resil nasledujici problem. Potreboval bych napr. soubor Červená voda.mp3 prevest na soubor Cervena_voda.mp3. Tudiz odstranit diakritiku a nahradit nekorektni znaky (v tomto pripade mezera). Bylo by fajn kdyby skript sel aplikovat rekurzivne na adresar s podadresari (a prejmenoval i nazvy adresaru). Podminkou je aby skript byl pro bash. V pythonu bych ho zvladl, ale na stroji kde ho chci aplikovat python neni. Bashem moc nevladnu a tak zadam o radu. Zkousel jsem hledat, ale nikde jsem nenasel zadne ucele reseni. Dik
Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

5.2.2008 12:39 petris
Rozbalit Rozbalit vše Re: odstraneni diakritiky v nazvu souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
prectete si many k find, mv, tr a musite to dat dohromady
5.2.2008 12:45 aaa
Rozbalit Rozbalit vše Re: odstraneni diakritiky v nazvu souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
skus detox
5.2.2008 12:47 aaa
Rozbalit Rozbalit vše Re: odstraneni diakritiky v nazvu souboru
a este mozno iconv
5.2.2008 13:05 ajikdpoe | skóre: 23 | blog: dvh
Rozbalit Rozbalit vše Re: odstraneni diakritiky v nazvu souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Toto by malo teoreticky fungovat (v akt. adresari), SIMULACIA=y znamena ze to len vypise co by to robilo, do toho sedu musis podoplnat odstranovanie diakrityky pre vsetky znaky:
#!/bin/bash

SIMULACIA=y

urob() {
  find | sort -dr | (while read i; do
    [ "$i" = "." ] && continue
    if [ "`test $1 "$i"; echo $?`" = "0" ]; then
      NOVY=`echo "$i" | sed 's/ /_/g;y/ČčÝýÚúŮůŇňŘřŠšŽž/CcYyUuUuNnRrSsZz/'`   # sem dopln odstranovanie diakritiky
      if [ "$SIMULACIA" = "y" ]; then
        echo "mv '$i' '$NOVY'"
      else
        mv "$i" "$NOVY"
      fi
    fi
  done)
}

urob -d   # najprv len adresare
urob -f   # potom len subory
5.2.2008 13:08 ajikdpoe | skóre: 23 | blog: dvh
Rozbalit Rozbalit vše Re: odstraneni diakritiky v nazvu souboru
Este drobne vylepsenie, tam kde sa naplna premenna NOVY=..., tak za to pridaj toto:

[ "$i" = "$NOVY" ] && continue

To spravy to ze ak je NOVY nazov rovnaky ako stary (nic sa nezmenilo) tak nic nebude nikam presuvat lebo:

mv subor.txt subor.txt

ti bude inak hlasit ako chybu (nemoze kopirovat sam na seba)
5.2.2008 14:40 vepro
Rozbalit Rozbalit vše Re: odstraneni diakritiky v nazvu souboru
Diky moc
5.2.2008 13:22 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: odstraneni diakritiky v nazvu souboru
Ještě by to chtělo test, zda cílový soubor už neexistuje, a pokud ano, přidat k názvu např. číslici.
29.6.2010 17:21 tyctor
Rozbalit Rozbalit vše Re: odstraneni diakritiky v nazvu souboru
pre subory z medzerami to nefunguje... aha:
mv './#_MP3/Stone_Temple_Pilots/1992 - Core/Core - 07 - Creep.mp3' './#_MP3/Stone_Temple_Pilots/1992-Core/Core-07-Creep.mp3'
mv: cannot stat `./#_MP3/Stone_Temple_Pilots/1992 - Core/Core - 07 - Creep.mp3': No such file or directory
29.6.2010 18:15 tyctor
Rozbalit Rozbalit vše Re: odstraneni diakritiky v nazvu souboru
aha sorka, koli tomu sa spustali najskor adresare o potom subory... tak to funguje... ;o)
5.2.2008 13:21 Honza
Rozbalit Rozbalit vše Re: odstraneni diakritiky v nazvu souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pro odstraneni cestiny:

mv "$i" "`echo \"$i\" | iconv -f utf-8 -t us-ascii//translit`"
5.2.2008 13:26 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: odstraneni diakritiky v nazvu souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Trocha upraveny skript, ktoreho vzor sa niekde vala v inom threade.
#!/bin/bash

# premenuje obsah vsetkych zadanych adresarov tak, aby neobsahovali diakritiku
# a zjednodusi ich mena

if [ $# -eq 0 ];then
    echo "Usage: ${0##*/} directory ..."
else
    while [ $# -gt 0 ];do
        if [ -d "$1" ];then
        find "$1" -mindepth 1 -maxdepth 1 |
        while read name; do
            echo "$name" >&2
            nname=`sed -r 'y/ĄąÁÂĂÄáâăäĆÇČćçčĎĐďđÉĘËĚéęëěÍÎíłľĹĺŃŇńňÓÔŐÖóôőöŔŕŘřŚŠŞśšşŤťŢţŮÚŰÜůúűüÝýŹŽŻźžż\x9D\x9A\x9E\x8D\x8A\x8E/AaAAA
                s/[^-0-9a-zA-Z_./()]+/_/g
                s/([-_])\1*/\1/g
                s/^[-_]+//
                s/[-_]*-[-_]*/-/g
                s/[-_ ]+([.()])/\1/g
                s/([.()])[-_ ]+/\1/g' <<<"$name"`
            if [[ "$name" != "$nname" ]]; then
                if [[ -e "$nname" ]]; then
                    oname="$nname"
                    for ((i=0; i<1000; i++)); do
                        nname="${oname%.*}."`printf %04d $i`".${oname##*.}"
                        [[ ! -e "$nname" ]] && break
                    done
                fi
                mv -v "$name" "$nname"
            fi
            find "$1" -mindepth 1 -maxdepth 1 -type d -print0 | xargs -0r "$0"
            done
            shift
        else
            echo "Directory $1 does not exist" >&2
        fi
    done
fi
If you hold a Unix shell up to your ear, you can you hear the C.
7.4.2009 00:25 Jezza
Rozbalit Rozbalit vše Re: odstraneni diakritiky v nazvu souboru

zkousel jsem tento skript...a on mi napsal tuhle chybu:

./rename.sh rename
rename/Dobytí severního pólu.mpg
sed: -e expression #1, char 192: unterminated `y' command
`rename/Dobytí severního pólu.mpg' -> `'
mv: cannot move `rename/Dobytí severního pólu.mpg' to `': No such file or directory
 

 

Co s tim?

Dalibor Smolík avatar 7.4.2009 00:56 Dalibor Smolík | skóre: 54 | blog: Postrehy_ze_zivota | 50°5'31.93"N,14°19'35.51"E
Rozbalit Rozbalit vše Re: odstraneni diakritiky v nazvu souboru
detox /home/uzivatel/adresar_kde_je_soubor_ke_zmene
Rozdíly v řeči a ve zvyklostech neznamenají vůbec nic, budeme-li mít stejné cíle a otevřená srdce.
7.4.2009 08:18 Jezza
Rozbalit Rozbalit vše Re: odstraneni diakritiky v nazvu souboru

Kdyz to udelam takto, tak mi to z nazvu udela takove paskvily...

napr:

DobytA_severnA_ho_pA3lu.mpg

Dalibor Smolík avatar 7.4.2009 10:34 Dalibor Smolík | skóre: 54 | blog: Postrehy_ze_zivota | 50°5'31.93"N,14°19'35.51"E
Rozbalit Rozbalit vše Re: odstraneni diakritiky v nazvu souboru

zkousel jsem tento skript...a on mi napsal tuhle chybu:

Ještě mě napadlo - soubor  obsahuje mezeru, měl by se dát do uvozovek. Pak to nenahlásí, že soubor nebyl nalezen.  Například při přehrávání souboru je možné zadat příkaz

mplayer soubor.mpg, avšak v případě mezer je nutné zadat

mplayer  "první soubor.mpg", vámi uvedený skript možná obsahuje tento problém.

Rozdíly v řeči a ve zvyklostech neznamenají vůbec nic, budeme-li mít stejné cíle a otevřená srdce.
7.4.2009 10:51 l4m4
Rozbalit Rozbalit vše Re: odstraneni diakritiky v nazvu souboru
Zřejmě jsou názvy souborů v utf-8, takže je třeba použít

detox -s utf_8
7.4.2009 11:29 Jezza
Rozbalit Rozbalit vše Re: odstraneni diakritiky v nazvu souboru

Tak jsem objevil, ze v karename je plugin, ktery tohle umi, ale je zatim experimentalni....mate s nim nejake zkusenosti?

Prisli jste uz kvuli nemu nekdo o data?

7.4.2009 13:16 Jezza
Rozbalit Rozbalit vše Re: odstraneni diakritiky v nazvu souboru

*krename

14.10.2011 10:25 FrantaS | skóre: 12 | Hlučín
Rozbalit Rozbalit vše Re: odstraneni diakritiky v nazvu souboru
Zdravím a omlouvám se za otevírání staré diskuze, ale mám zato, že je to namístě.

Díky za tento upravený skript.

Jak je nutné ho upravit, aby z toho všeho zanoření sám po CTRL+C "vyskákal", když ho při testování potřebuji zastavit?

Při provádění testů jsem na disku narazil na soubor s enter v názvu. Skutečně ho krusader zobrazuje na dva řádky. Tento skript si s tím neporadí. Co s tím?

Ručně to mv zvládne. find ho, ale v konzole zobrazí s otazníkem na místě enter a ve skriptu do proměnné name předá z názvu jen část před enter. Co s tím?

On je totiž problém ho v těch stovkách souborů najít, aby to člověk udělal ručně a neprudil. :)
Ať se nám daří.
xsubway avatar 7.10.2010 11:19 xsubway | skóre: 13 | blog: litera_scripta_manet
Rozbalit Rozbalit vše Re: odstraneni diakritiky v nazvu souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
pyrenamer
Jesus Jimenez avatar 7.10.2010 13:59 Jesus Jimenez | skóre: 29
Rozbalit Rozbalit vše Re: odstraneni diakritiky v nazvu souboru
Nejenze ozivujete diskuzi dva roky starou, ale navic nejspis ctete pouze titulek. Tazatel tenkrat chtel sice odstraneni diakritiky, ale pro bash v konzole a zasadne NE v pythonu :) A vy nabidnete pythonovske udelatko s GTK GUI.
Doaenův zákon průtahů: Čím pomaleji pracuješ, tím méně naděláš chyb. -- Murphy
xsubway avatar 8.10.2010 13:04 xsubway | skóre: 13 | blog: litera_scripta_manet
Rozbalit Rozbalit vše Re: odstraneni diakritiky v nazvu souboru
máte pravdu, a ještě jsem to napsal blbě :| ... správně je to pyrename

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.