abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 20:11 | Nová verze

    Byla vydána (𝕏) nová verze 26.1 open source firewallové a routovací platformy OPNsense (Wikipedie). Jedná se o fork pfSense postavený na FreeBSD. Kódový název OPNsense 26.1 je Witty Woodpecker. Přehled novinek v příspěvku na fóru.

    Ladislav Hagara | Komentářů: 2
    včera 15:11 | Zajímavý projekt

    Deník TO spustil vlastní zpravodajský webový portál ToHledej.CZ s internetovým vyhledávačem a bezplatnou e-mailovou schránkou. Dle svého tvrzení nabízí 'Zprávy, komentáře, analýzy bez cenzury' a 'Mail bez šmírování a Velkého bratra'. Rozložením a vizuálním stylem se stránky nápadně podobají portálu Seznam.cz a nejspíše je cílem být jeho alternativou. Z podmínek platformy vyplývá, že portál využívá nespecifikovaný internetový vyhledávač třetí strany.

    NUKE GAZA! 🎆 | Komentářů: 12
    včera 14:11 | Zajímavý projekt

    Computer History Museum (Muzeum historie počítačů) zpřístupnilo své sbírky veřejnosti formou online katalogu. Virtuálně si tak můžeme prohlédnout 'rozsáhlou sbírku archivních materiálů, předmětů a historek a seznámit se s vizionáři, inovacemi a neznámými příběhy, které revolučním způsobem změnily náš digitální svět'.

    NUKE GAZA! 🎆 | Komentářů: 3
    včera 14:00 | Zajímavý projekt

    Ruský hacker VIK-on si sestavil vlastní 32GB DDR5 RAM modul z čipů získaných z notebookových 16GB SO-DIMM RAM pamětí. Modul běží na 6400 MT/s a celkové náklady byly přibližně 218 dolarů, což je zhruba třetina současné tržní ceny modulů srovnatelných parametrů.

    NUKE GAZA! 🎆 | Komentářů: 10
    včera 11:00 | Upozornění

    Národní identitní autorita (NIA), která ovlivňuje přihlašování prostřednictvím NIA ID, MEP, eOP a externích identit (např. BankID), je částečně nedostupná.

    Ladislav Hagara | Komentářů: 9
    včera 02:44 | Nová verze

    Byla vydána nová verze 1.16.0 klienta a serveru VNC (Virtual Network Computing) s názvem TigerVNC (Wikipedie). Z novinek lze vypíchnout nový server w0vncserver pro sdílení Wayland desktopu. Zdrojové kódy jsou k dispozici na GitHubu. Binárky na SourceForge. TigerVNC je fork TightVNC.

    Ladislav Hagara | Komentářů: 0
    27.1. 14:44 | Nová verze

    Byla vydána nová verze 4.6 (𝕏, Bluesky, Mastodon) multiplatformního open source herního enginu Godot (Wikipedie, GitHub). Přehled novinek i s náhledy v příspěvku na blogu.

    Ladislav Hagara | Komentářů: 0
    27.1. 13:33 | Humor

    Rozsáhlá modernizace hardwarové infrastruktury Základních registrů měla zabránit výpadkům digitálních služeb státu. Dnešnímu výpadku nezabránila.

    Ladislav Hagara | Komentářů: 11
    27.1. 13:11 | Nová verze

    Čínský startup Kimi představil open-source model umělé inteligence Kimi K2.5. Nová verze pracuje s textem i obrázky a poskytuje 'paradigma samosměřovaného roje agentů' pro rychlejší vykonávání úkolů. Kimi zdůrazňuje vylepšenou schopnost modelu vytvářet zdrojové kódy přímo z přirozeného jazyka. Natrénovaný model je dostupný na Hugging Face, trénovací skripty však ne. Model má 1 T (bilion) parametrů, 32 B (miliard) aktivních.

    NUKE GAZA! 🎆 | Komentářů: 14
    27.1. 09:00 | IT novinky

    V Raspberry Pi OS lze nově snadno povolit USB Gadget Mode a díky balíčku rpi-usb-gadget (CDC-ECM/RNDIS) mít možnost se k Raspberry Pi připojovat přes USB kabel bez nutnosti konfigurování Wi-Fi nebo Ethernetu. K podporovaným Raspberry Pi připojeným do USB portu podporujícího OTG.

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (18%)
     (6%)
     (0%)
     (10%)
     (23%)
     (3%)
     (5%)
     (2%)
     (12%)
     (33%)
    Celkem 653 hlasů
     Komentářů: 19, poslední včera 13:03
    Rozcestník

    Hromadné zrušení diakritiky v adresářovém stromu

    5.4.2005 01:36 | Přečteno: 4781× | linux

    Už několikrát se mi stalo, že jsem potřeboval v adresářovém podstromu zrušit diakritiku, popř. nahradit mezery v názvech znakem "_". Nepodařilo se mi najít nějaký program, který je k tomu určený a "ruční" přejmenovávání mě už přestalo bavit. Proto, ač nejsem zkušený programátor v shellu, jsem si zkusil udělat skript, který výše zmíněné zvládne. Nevím, na kolik je moje řešení "čisté", nicméně jsem to zkoušel a k mé radosti skript udělal, co jsem od něj očekával. Proto jsem se rozhodl dát si ho do blogu jako svůj první zápis. :o) Zároveň budu rád, když mě ti zkušenější z vás třeba upozorní na mou chybu nebo možnost lepšího řešení.

    Tak tedy: Skript je rozdělen do dvou souborů. První soubor s názvem start obsahuje jen příkaz find, který prohledává aktuální adresář a pro každou položku spouští skript diakritika s parametrem názvu položky:

    soubor "start":
    #!/bin/bash
    
    find ./ -exec ./diakritika {} \;
    

    Skript diakritika vypadá nějak následovně.

    soubor "diakritika":
    #!/bin/bash
    
    if test -w "$1"
     then
      echo "-----------------------------------------------------------------"
      echo "Prejmenovavam soubor $1"
      JMENO=`echo $1 | sed 's/ě/e/g' | sed 's/š/s/g' | sed 's/č/c/g'| sed 's/ř/r/g'`
      JMENO=`echo $JMENO | sed 's/ž/z/g' | sed 's/ý/y/g' | sed 's/á/a/g' | sed 's/í/i/g'`
      JMENO=`echo $JMENO | sed 's/é/e/g' | sed 's/ú/u/g' | sed 's/ů/u/g' | sed 's/ó/o/g'`
      JMENO=`echo $JMENO | sed 's/ď/d/g' | sed 's/ť/t/g' | sed 's/ň/n/g'`
      JMENO=`echo $JMENO | sed 's/Ě/E/g' | sed 's/Š/S/g' | sed 's/Č/C/g'| sed 's/Ř/R/g'`
      JMENO=`echo $JMENO | sed 's/Ž/Z/g' | sed 's/Ý/Y/g' | sed 's/Á/A/g' | sed 's/Í/I/g'`
      JMENO=`echo $JMENO | sed 's/É/E/g' | sed 's/Ú/U/g' | sed 's/Ů/U/g' | sed 's/Ó/O/g'`
      JMENO=`echo $JMENO | sed 's/Ď/D/g' | sed 's/Ť/T/g' | sed 's/Ň/N/g'`
      JMENO=`echo $JMENO | sed 's/ /_/g'`
      echo "Na soubor:"
      echo $JMENO
       if [ "X$JMENO" != "X$1" ]
       then
         mv -f "$1" "$JMENO"
         if test -d "$JMENO"
         then
           find ./ -exec diakritika {} \;
         fi
       fi
     else
     echo "Nemas prava menit soubor/adresář!"
     echo "-----------------------------------------------------------------"
    fi
    

    Na začátku skript otestuje, zda je povolen soubor/adresář pro zápis. Pokud ano, odstraní háčky a čárky (náhradí se písmenem bez háčku/čárky), mezeru nahradí podtržítkem. Pokud je nový název různý od starého (soubor obsahoval diakritiku) přejmenuje soubor/adresář na nové jméno. Na problém jsem narazil, když měněnou položkou byl adresář. U adresáře, který obsahoval diakritiku, se diakrikika odstranila, ale skript už dál neprocházel jeho podstrom. To vyřešil poslední test -- je-li měněnou položkou adresář, je v podstatě znovu spuštěn start. Řádky začínající echo pouze vypisují, s čím skript pracuje a jejich smazáním by se možná urychlil (nevím, možná ne).

    Ještě bych dodal, že skript samozřejmě nenahrazuje veškerou diakritiku, ale jen tu běžně používanou v češtině (snad jsem na něco nezapomněl). Další náhrady by se ale daly dopsat. Skript jsem testoval jen na malém podstromu asi o třech úrovních, takže nevím, jak bude pracovat při složitějších strukturách.

    Pro použití skriptu stačí oba soubory nahrát do adresáře, v jehož podstromu chceme odstranit diakritiku a spustit ./start

    Budu rád za vaše náměty na lepší řešení. Bude-li někdo skript zkoušet -- doporučuji nejprve na neškodných datech. Jak jsem psal v úvodu, nejsem v žádném případě zkušený programátor v shellu, a proto nevím, zda nemůže mít tento skript "vedlejší účinky"...

           

    Hodnocení: 33 %

            špatnédobré        

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

    Komentáře

    Vložit další komentář

    5.4.2005 03:51 Honza Král | skóre: 3 | Praha
    Rozbalit Rozbalit vše sed
    lepsi nez spousta prikazu s/x/y/ je lepsi pouzit jeden: bud sed -e 'y/abcd/ABCD/' nebo tr 'abcd' 'ABCD'
    5.4.2005 07:38 kavol
    Rozbalit Rozbalit vše Re: sed
    jo, když jsem na to koukal, tak jsem se taky divil, proč používá sed a ne tr :-) ... nicméně pak jsem si vzpomněl, jak jsme to řešili s kámošem, a že asi nejlepší je použít program recode (aneb proč opisovat do tr půlku kódové tabulky, když už to udělal někdo za mě a flexibilněji, mohu překódovat z více různých sad; pravda, trošku kanón na vrabce ;-))

    řešení s findem je imho blbost, stejně jako používat na to dva skripty; máme to vyřešené pomocí rekursivní funkce

    bohužel teď nemám po ruce příslušný zdroják, takže jenom nastíním ideu: procházení se děje pomocí for *, testuje se, zda jde o adresář, a pokud ano, tak funkce zavolá sama sebe na ten adresář, potom dojde k přejmenování (tzn. adresář se přejmenuje, až se z něj vyleze ven, nedojde k nekonsistenci)

    p.s. a odstraňování diakritiky považuju za pěknou blbost - zrušením všech ne-ASCII (7bit) znaků bych uvedl do absolutního chaosu např. svoje veškeré ruské písničky - pojmenované samozřejmě v azbuce, od čeho máme UTF8 :-)

    p.p.s. taky vás tak štvou lidi, co v angličtině (i jinde) místo apostrofu píšou čárku nad písmenem, takže místo ASCII se na jejich věc (obvykle právě jméno souboru) použije nejbližší sada, která tento "spacing modifier" obsahuje, a tudíž prudce klesá strojová zpracovatelnost (objevuje se problém s překódováním a především to, že čárka není apostrof - třeba konverze ohraničení apostrofy na korektní uvozovky)? :-(
    5.4.2005 08:34 kavol
    Rozbalit Rozbalit vše Re: sed
    eh, nějak jsem přehlíd, že už je tu i realizace toho, co navrhuju (až na to recode ;-)) ... mno, řekl bych, že by se to dalo i zjednodušit, ale tak nějak jsem to myslel ...
    5.4.2005 04:05 Honza Král | skóre: 3 | Praha
    Rozbalit Rozbalit vše redundance
    s tim findem je to divny, co kdyz prejmenujes adresar, pak vubec nepujdou zmenit soubory uvnitr... (a krome toho je pak zbytecna ta tva rekurze)...

    navrhuju tohle:
    #!/bin/bash
    
    function strip_diak {
      echo "$1" | tr 'ěščřž ..' 'escrz_..'
    }
    
    function diak {
      new_name="$( strip_diak "$1" )"
      mv -f "$1" "$new_name" || return 1
    
      cd "$new_name" || return 1
    
      for fajl in *; do
        if [[ -d "$fajl" ]]; then
          diak "$fajl"
        else
          new_name="$( strip_diak "$fajl" )"
          if [[ "$new_name" != "$fajl" ]]; then
            mv -f "$fajl" "$new_name" || echo "mv error" && return 1
          fi
        fi
      done
    
      return 0
    }
    
    diak "${1:-$PWD}" || exit 1
    
    exit 0
    
    Valoun avatar 5.4.2005 11:33 Valoun | skóre: 30 | blog: Psavec | Středočeský kraj
    Rozbalit Rozbalit vše Re: redundance
    To je vsechno moc pekny ja ovsem narazil na to, ze nevim jak do toho skriptu
    echo "$1" | tr 'ěščřž ..' 'escrz_..'
    zapsat, ze chci prelozit patricne unikodove znaky jako jsou äåöõü atd.
    23.5.2005 16:16 Krakonoš | skóre: 17 | Nová Ves v Horách
    Rozbalit Rozbalit vše Re: redundance
    Tak tohle sem presne potreboval. Ale nejako se mi nepovedlo to dat do chodu, ale ziskal jsem inspiraci a za chvilenku napsal vlastni scriptik, ktery resi

    prejmenovani a rekurzivni prochazeni aktualniho stromu (stacii :]) kolizi jmen - pridava pripadne nakonec .cislo pokud je to nutne

    Tak snad sem na nic nezapomel :

    #!/bin/bash

    function strip_diak { echo "$1" | tr '¿¿¿¿¿ýáíé¿¿¿¿¿¿¿¿ÝÁÍÉ¿¿¿' 'escrzyaiedtnESCRZYAIEDTN' }

    function rename { for file in *; do new_name="$( strip_diak "$file" )" if [[ "$file" != "$new_name" ]]; then if [[ -e "$new_name" ]]; then n=0 while [[ -e "$new_name.$n" ]]; do n=`expr $n + 1` done new_name="$new_name.$n" fi mv "$file" "$new_name" fi if [[ -d "$new_name" ]]; then cd $new_name rename cd .. fi done }

    rename

    exit 0

    ou,..koukam, ze to neskouslo ty znaky,...tos nevadi, si je tam dopishte :]
    5.4.2005 08:59 Jiri Bajer | skóre: 34 | blog: Sarimuv koutek | Praha
    Rozbalit Rozbalit vše Whitespaces
    IMHO se find -print nedokaze korektne vyporadat s whitespaces v nazvech souboru - nebylo by lepsi pouzit find -print0 | xargs --null?

    Tak jak tak: diky za prispevek, podle me je cennejsi komplet zdrbnout tvuj kod a vymyslet lepsi, nez mlcet a nechat vsechny, at znovu vynalezaji kolo! B-)
    5.4.2005 11:29 Michal Marek (twofish) | skóre: 55 | blog: { display: blog; } | Praha
    Rozbalit Rozbalit vše Práva
    Na přejmenování souboru nepotřebuju právo zápisu do toho souboru ;-)
    5.4.2005 11:30 honza
    Rozbalit Rozbalit vše existuje soubor ?
    Co se stane mám-li v jednom adresáři vykaz.txt a výkaz.txt :-)
    5.4.2005 14:19 Zbyněk Petr (Zboňa) | skóre: 6 | blog: zbona | Brno / Vyškov
    Rozbalit Rozbalit vše Re: existuje soubor ?
    Aha, tak na to jsem pozapomněl. :-)
    5.4.2005 15:21 kavol
    Rozbalit Rozbalit vše Re: existuje soubor ?
    používání -f je špatné, špatné, špatné ...

    ... mamííí, ploč ťam má ťeň páň -f míšto -i? :-)
    5.4.2005 15:10 VícNežNic | skóre: 42 | blog: Spáleniště | Ne dost daleko
    Rozbalit Rozbalit vše Hm
    Kdyby měl někdo dojem, že tohle je moc složité a nevadilo by mu zjednodušit zadání na: ,,hromadné zrušení adresářového stromu``, pak milerád pomohu radou :-)
    Copak toho není dost?
    5.4.2005 18:27 Zdeněk Burda | skóre: 61 | blog: Zdendův blog | Praha
    Rozbalit Rozbalit vše Re: Hm
    Otočení kolečkem nahoru přepíná plochu směrem doprava

    Ať žije výchozí nastavení WindowMakeru :-)
    -- Nezdar není hanbou, hanbou je strach z pokusu.
    18.1.2013 23:19 Lukas
    Rozbalit Rozbalit vše Re: Hromadné zrušení diakritiky v adresářovém stromu
    Ahoj vim ze tohle je hodne stare ale nevite nekdo jak se ta diakritika da odstranit pres PHP jo a jinak momentalne pouzivam XAMPP server a Windows 7... je sice hezke ze pres iconv a spoustu dalsi funkci odstranim diakritiku ale problem je s PHP rename funkci ve ktere nemohu prejmenovavat slozky a soubory s diakritikou..takze hlavni problem je prave v prejmenovani dejte mi prosim vedet na email: lukas.stribrny@hotmail.com

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.