Portál AbcLinuxu, 5. května 2025 15:10

Dotaz: Odstranění diakritiky a nepovolených znaků pro Windows v názvech souborů a složek

23.2.2010 19:30 moss | skóre: 4
Odstranění diakritiky a nepovolených znaků pro Windows v názvech souborů a složek
Přečteno: 3650×
Odpovědět | Admin
Ahoj, nedávno jsem našel příkaz pro rekurzivní zaměnění mezer v názvech souborů a složek za podtržítko. Zajímalo by mě jestli existuje nějaký příkaz i pro:

1) Rekurzivní odstranění diakritiky v názvech souborů a složek

2) Rekurzivní odstranění znaků nepovolených ve Windows (sice se snažím nevytvářet nic co by bylo v konfliktu s Windows ale uhlídat to nejde, např. při automatickým tagování a ve Windows mám s tím problémy)

Díky za odpověď.

Debian testing/unstable
Nástroje: Začni sledovat (3) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

mess avatar 23.2.2010 20:26 mess | skóre: 43 | blog: bordel | Háj ve Slezsku - Smolkov
Rozbalit Rozbalit vše Re: Odstranění diakritiky a nepovolených znaků pro Windows v názvech souborů a složek
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ad odstranění diaktitiky: mám vyzkoušeno toto:
iconv --from="UTF-8" --to="ASCII//TRANSLIT"
Normálně tomu na stdin nasypeš český text a ze stdout ti vyleze "cesky text". Rekurzi, věřím zvládneš.
Cez párne mesiace zošíváš vaginy, cez neparne montuješ hajzle.
23.2.2010 21:39 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: Odstranění diakritiky a nepovolených znaků pro Windows v názvech souborů a složek
Haha, takhle jednoduše jsem to viděl taky, než jsem se do toho pustil.
In Ada the typical infinite loop would normally be terminated by detonation.
mess avatar 23.2.2010 22:35 mess | skóre: 43 | blog: bordel | Háj ve Slezsku - Smolkov
Rozbalit Rozbalit vše Re: Odstranění diakritiky a nepovolených znaků pro Windows v názvech souborů a složek
Zkus tohle. Ale nejdřív si to vyzkoušej na nějakých datech, o která můžeš přijít, protože jsem to netestoval.
#!/usr/bin/env ruby
# encoding: utf-8
# tento skript předpokládá, že jsi v adresáři, ve kterém chceš detoxikovat soubory

require "fileutils"

def walk(dir)
  FileUtils.cd dir
  filenames = `ls -1`.split("\n") # seznam souborů v adresáři jde to i líp, ale nechce se mi hledat
  
  filenames.each do |filename|
    sanitized_filename = `iconv --from="UTF-8" --to="ASCII//TRANSLIT" <<< "#{filename}"`.strip
    FileUtils.mv filename, sanitized_filename unless filename == sanitized_filename
    walk(sanitized_filename) unless File.file? sanitized_filename
  end
end

walk(".")
Cez párne mesiace zošíváš vaginy, cez neparne montuješ hajzle.
24.2.2010 05:54 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: Odstranění diakritiky a nepovolených znaků pro Windows v názvech souborů a složek
Problém je v představě, že "přesunout hodně souborů je jen hodněkrát přesunout jeden soubor a přesunout jeden soubor je jednoduché".

Co když máme sýrový.doc a syrový.doc, jak se k tomu zachovají navrhovaná řešení? Co když máme sýrový.doc a pak dvojici syrový.xls a syrový.doc, která patří k sobě?
In Ada the typical infinite loop would normally be terminated by detonation.
24.2.2010 10:03 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Odstranění diakritiky a nepovolených znaků pro Windows v názvech souborů a složek
Jo-jo.
Řešil jsem to převodem do nepříliš hezkého, spřežkování
vše mimo A-Za-z0-9.-_(třeba plus mezera) na #hex-hodnota-znaku
něco jako 'text text$text.txt' −> 'text#20text#24text.txt'
HEX hodnota znaku byla v UTF-8, ale může být efektivnější (ale teoreticky nejednoznačné pokud fs je UTF-8) ji vzít s nějakého ISO 8859-X kódování
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
24.2.2010 13:39 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: Odstranění diakritiky a nepovolených znaků pro Windows v názvech souborů a složek
Optimální je si soubory rozřadit podle názvu bez přípony a snažit se přejmenovávat skupiny najednou. Pokud při přejmenování skupiny vznikne konflikt s existujícím souborem, tak před příponu dáte třeba _1, _2 atd. Obdobně lze zacházet i s příponami.
In Ada the typical infinite loop would normally be terminated by detonation.
24.2.2010 14:11 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Odstranění diakritiky a nepovolených znaků pro Windows v názvech souborů a složek
Ono to lze různými způsoby, to co jsem popisoval je „absolutně jednoznačné“ řešení a tudíž -navíc- obousměrné.
Ve Vašem nevíte který bude jednička, a který dvojka a časem se mohou třeba i otočit (záleží na algoritmu) - tím ale neříkám, že je to problém. Je to jen definicí co je (autonomní) skupina. :)
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
24.2.2010 14:16 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: Odstranění diakritiky a nepovolených znaků pro Windows v názvech souborů a složek
No jo, akorát že ten soubor s #20 je pak brutálně nečitelný.
In Ada the typical infinite loop would normally be terminated by detonation.
24.2.2010 14:28 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Odstranění diakritiky a nepovolených znaků pro Windows v názvech souborů a složek
¡Já chci mít poslední slovo! :)

Psal jsem: „Řešil jsem to převodem do nepříliš hezkého, spřežkování“.
Jinak konkrétně #20 byl na ukázku, to je lepší nahradit podtržítkem.

To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
1.2.2011 03:20 Síma | skóre: 11
Rozbalit Rozbalit vše Re: Odstranění diakritiky a nepovolených znaků pro Windows v názvech souborů a složek
#/bin/bash

fromkod="cp1250"
tokod="ASCII//TRANSLIT"
dest="nocz"

mkdir -p ${dest}

for i in `ls | tr ' ' '@'`
do
clean=`echo "$i" | iconv --from=${fromkod} --to=${tokod} | tr '@' '_' | tr '(' '_' | tr ')' '_' `
orig=`echo "$i" | tr '@' ' '`
echo cp" -p \"$orig\" "${dest}/$clean | bash
done
25.2.2010 12:58 moss | skóre: 4
Rozbalit Rozbalit vše Re: Odstranění diakritiky a nepovolených znaků pro Windows v názvech souborů a složek
ad 1 | iconv --from="UTF-8" --to="ASCII//TRANSLIT" Nevím jak tenhle příkaz použít, nejsem v tom moc zběhlý :). Takže jsem ho použil tak:
icewolf@hal:~/!Main/TEST$ iconv --from="UTF-8" --to="ASCII//TRANSLIT"

ale nic se nestalo, nic to nepřejmenovalo takže to dělám asi špatně :-).

ad skript Zkusil jsem vytvořit i ten skript "/usr/bin/env.ruby" a dopadlo to takto:
icewolf@hal:~/!Main/TEST$ /usr/bin/env.ruby
sh: Syntax error: redirection unexpected
/usr/lib/ruby/1.8/fileutils.rb:505:in `rename': No such file or directory - ěšíščřřá or  (Errno::ENOENT)
        from /usr/lib/ruby/1.8/fileutils.rb:505:in `mv'
        from /usr/lib/ruby/1.8/fileutils.rb:1396:in `fu_each_src_dest'
        from /usr/lib/ruby/1.8/fileutils.rb:1412:in `fu_each_src_dest0'
        from /usr/lib/ruby/1.8/fileutils.rb:1394:in `fu_each_src_dest'
        from /usr/lib/ruby/1.8/fileutils.rb:494:in `mv'
        from /usr/bin/env.ruby:13:in `walk'
        from /usr/bin/env.ruby:11:in `each'
        from /usr/bin/env.ruby:11:in `walk'
        from /usr/bin/env.ruby:18
A také to nic neudělalo.
Debian testing/unstable
Jakub Lucký avatar 25.2.2010 15:44 Jakub Lucký | skóre: 40 | Praha
Rozbalit Rozbalit vše Re: Odstranění diakritiky a nepovolených znaků pro Windows v názvech souborů a složek
1) To se musí použít s něčím...

echo ščřžýáí | iconv --from="UTF-8" --to="ASCII//TRANSLIT"
If you understand, things are just as they are; if you do not understand, things are just as they are.
Jendа avatar 23.2.2010 21:57 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Odstranění diakritiky a nepovolených znaků pro Windows v názvech souborů a složek
Odpovědět | | Sbalit | Link | Blokovat | Admin
detox - utility to replace problematic characters in filenames
?
Fuky avatar 23.2.2010 22:53 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: Odstranění diakritiky a nepovolených znaků pro Windows v názvech souborů a složek
Odpovědět | | Sbalit | Link | Blokovat | Admin

Škoda, convmv by to chtělo ještě vylepšit:

$ convmv -f utf8 -t latin1 příšerně_žluťoučký_kůň_úpěl_ďábelské_ódy
Your Perl version has fleas #37757 #49830
Starting a dry run without changes...
iso-8859-1 doesn't cover all needed characters for: "./příšerně_žluťoučký_kůň_úpěl_ďábelské_ódy"
To prevent damage to your files, we won't continue.
First fix errors or correct options!

V krename stačí zapnout Transliteration Plugin:

$ ls
příšerně_žluťoučký_kůň_úpěl_ďábelské_ódy
$ krename
priserne_zlutoucky_kun_upel_dabelske_ody
-- RÁMO: psí tábor , ETriatlon: Výuka plavání
Fuky avatar 24.2.2010 00:54 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: Odstranění diakritiky a nepovolených znaků pro Windows v názvech souborů a složek
Příloha:

V příloze je patchnutý convmv:

$ convmv --notest -f utf8 -t latin1 příšerně_žluťoučký_kůň_úpěl_ďábelské_ódy 
Your Perl version has fleas #37757 #49830                                                       
mv "./příšerně_žluťoučký_kůň_úpěl_ďábelské_ódy" "./priserne_zlutoucky_kun_upel_dabelske_ody"    
Ready!

Pro transliteral používá konwert.

25.2.2010 13:26 moss | skóre: 4
Rozbalit Rozbalit vše Re: Odstranění diakritiky a nepovolených znaků pro Windows v názvech souborů a složek
Vyzkoušel jsem Krename a na čistě odstranění diakritiky se zdá být v pohodě :-). Díky za tip.
Debian testing/unstable
25.2.2010 14:35 Robbie | skóre: 21 | Praha
Rozbalit Rozbalit vše Re: Odstranění diakritiky a nepovolených znaků pro Windows v názvech souborů a složek
Doplnim dalsi tip: pyrenamer
Dalibor Smolík avatar 24.2.2010 01:06 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: Odstranění diakritiky a nepovolených znaků pro Windows v názvech souborů a složek
Odpovědět | | Sbalit | Link | Blokovat | Admin
také se dá použít detox ..
Rozdíly v řeči a ve zvyklostech neznamenají vůbec nic, budeme-li mít stejné cíle a otevřená srdce.
Jendа avatar 24.2.2010 16:10 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Odstranění diakritiky a nepovolených znaků pro Windows v názvech souborů a složek
#3
24.2.2010 06:23 Čech Antonín | skóre: 17 | blog: CzechTony
Rozbalit Rozbalit vše Re: Odstranění diakritiky a nepovolených znaků pro Windows v názvech souborů a složek
Odpovědět | | Sbalit | Link | Blokovat | Admin

Zatim bez prolemu pouzivam vycisti.py.

24.2.2010 18:22 pavel
Rozbalit Rozbalit vše Re: Odstranění diakritiky a nepovolených znaků pro Windows v názvech souborů a složek
Zkusil jsi použít vycisti.py na adresář s názvem "Udělej"? Mám kódování ISO8859-2 a u tohoto adresáře mi to hlásí chybu. Pokud použiji příkaz: vycisti.py -c ISO8859-2, převod proběhne bez problémů.
25.2.2010 13:01 moss | skóre: 4
Rozbalit Rozbalit vše Re: Odstranění diakritiky a nepovolených znaků pro Windows v názvech souborů a složek
vycisti.py mi funguje v pohodě.. ale odstraňuje toho až moc :-D - diakritiku, velký/malý písmena, téměř všechny znaky (i (), [], = který jsou s Windowsem kompatibilní. Nešlo by ho nějak nastavit aby odstraňoval pouze diakritiku a znaky nekompatibilní s Windows?
Debian testing/unstable
25.2.2010 13:32 moss | skóre: 4
Rozbalit Rozbalit vše Re: Odstranění diakritiky a nepovolených znaků pro Windows v názvech souborů a složek
*velký písmena nahradí za malý :-D
Debian testing/unstable
26.2.2010 13:37 Čech Antonín | skóre: 17 | blog: CzechTony
Rozbalit Rozbalit vše Re: Odstranění diakritiky a nepovolených znaků pro Windows v názvech souborů a složek

Programovat neumim, ale velka/mala pismena resi radek:

fileName = fileName.lower() #lower case

Takze ho zakomentuj nebo smaz, jak upravit konecnou kontrolu, aby nepredhazoval warning jsem nezjistoval.

Nuphar avatar 24.2.2010 17:33 Nuphar | skóre: 19
Rozbalit Rozbalit vše Re: Odstranění diakritiky a nepovolených znaků pro Windows v názvech souborů a složek
Odpovědět | | Sbalit | Link | Blokovat | Admin
Já s oblibou používám Krenamer, který má modul na odstranění ne-ASCI znaků, nahrazení mezer už je hračka.
Per aspera, Asparagus et Aspergillus ad a/Astra!

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.