Portál AbcLinuxu, 5. května 2025 15:10
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š.
#!/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(".")
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ě?
A-Za-z0-9.-_
(třeba plus mezera) na #hex-hodnota-znaku'text text$text.txt'
−> 'text#20text#24text.txt'
#/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
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ě
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:18A také to nic neudělalo.
detox - utility to replace problematic characters in filenames?
Š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
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.
Zatim bez prolemu pouzivam vycisti.py.
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.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.