Portál AbcLinuxu, 2. listopadu 2025 07:24
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ě
.
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.
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.
. Díky za tip.
Zatim bez prolemu pouzivam vycisti.py.
- 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?
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.