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í
×
    dnes 05:33 | Pozvánky

    Protože je už po aprílu, můžou strahováci opět zveřejnit program další Virtuální Bastlírny, aniž by připravená témata působila dojmem, že jde o žert. Vězte tedy, že již v úterý 7. dubna od 20:00 proběhne VB, kde se setkají bastlíři, technici, učitelé i nadšenci do techniky a kde i vy se můžete zapojit do družného hovoru, jako by všichni seděli u pomyslného piva. Co mají bastlíři tento měsíc na srdci? Pravděpodobně by nás musel zasáhnout meteorit

    … více »
    bkralik | Komentářů: 1
    včera 23:33 | Nová verze

    Byla vydána verze 26.1 aneb čtvrtletní aktualizace open source počítačového planetária Stellarium (Wikipedie, GitHub). Vyzkoušet lze webovou verzi Stellaria na Stellarium Web.

    Ladislav Hagara | Komentářů: 1
    včera 23:00 | Zajímavý projekt

    VOID (Video Object and Interaction Deletion) je nový open-source VLM model pro editaci videa, který dokáže z videí odstraňovat objekty včetně všech jejich fyzikálních interakcí v rámci scény (pády, kolize, stíny...) pomocí quadmaskingu (čtyřhodnotová maska, která člení pixely scény do čtyř kategorií: objekt určený k odstranění, překrývající se oblasti, objektem ovlivněné oblasti a pozadí scény) a dvoufázového inpaintingu. Za projektem stojí výzkumníci ze společnosti Netflix.

    NUKE GAZA! 🎆 | Komentářů: 7
    včera 05:22 | Zajímavý software

    Design (GitHub) je 2D CAD pro GNOME. Instalovat lze i z Flathubu. Běží také ve webovém prohlížeči.

    Ladislav Hagara | Komentářů: 13
    včera 04:11 | Zajímavý software

    Příspěvek na blogu herního enginu Godot představuje aplikaci Xogot přinášející Godot na iPad a iPhone. Instalovat lze z App Storu. Za Xogotem stojí Miguel de Icaza (GitHub) a společnost Xibbon.

    Ladislav Hagara | Komentářů: 2
    4.4. 04:22 | Komunita

    Na čem pracují vývojáři webového prohlížeče Ladybird (GitHub)? Byl publikován přehled vývoje za březen (YouTube).

    Ladislav Hagara | Komentářů: 19
    3.4. 16:44 | Nová verze

    ESP-IDF (Espressif IoT Development Framework), tj. oficiální vývojový framework pro vývoj aplikací na mikrokontrolérech řady ESP32, byl vydán v nové verzi 6.0. Detaily na portálu pro vývojáře.

    Ladislav Hagara | Komentářů: 0
    3.4. 12:33 | Nová verze

    DeepMind (Alphabet) představila novou verzi svého multimodálního modelu, Gemma 4. Modely jsou volně k dispozici (Ollama, Hugging Face a další) ve velikostech 5-31 miliard parametrů, s kontextovým oknem 128k až 256k a v dense i MoE variantách. Modely zvládají text, obrázky a u menších verzí i audio. Modely jsou optimalizované pro běh na desktopových GPU i mobilních zařízeních, váhy všech těchto modelů jsou uvolněny pod licencí Apache 2.0. Návod na spuštění je už i na Unsloth.

    NUKE GAZA! 🎆 | Komentářů: 13
    3.4. 03:55 | Nová verze

    Cursor (Wikipedie) od společnosti Anysphere byl vydán ve verzi 3. Jedná se o multiplatformní proprietární editor kódů s podporou AI (vibe coding).

    Ladislav Hagara | Komentářů: 0
    2.4. 19:55 | Zajímavý projekt

    Průkopnická firma FingerWorks kolem roku 2000 vyvinula vícedotykové trackpady s gesty a klávesnice jako TouchStream LP. V roce 2005 ji koupil Apple, výrobu těchto produktů ukončil a dotykové technologie využil při vývoji iPhone. Multiplatformní projekt Apple Magic TouchstreamLP nyní implementuje funkcionalitu TouchStream LP na současném Apple Magic Trackpad, resp. jejich dvojici. Diskuze k vydání probíhá na Redditu.

    |🇵🇸 | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (14%)
     (7%)
     (1%)
     (12%)
     (30%)
     (3%)
     (6%)
     (1%)
     (14%)
     (23%)
    Celkem 1226 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    Rozcestník

    Dotaz: bash - načtení názvu souboru & zpracování

    30.5.2018 14:02 Tomas96
    bash - načtení názvu souboru & zpracování
    Přečteno: 384×
    Ahoj,

    lámu si hlavu s jednou zvláštností v bash (nebo spíš jsem nepochopil jak bash to bash zpracovává). Potřeboval bych načíst všechny soubory ve složce, uložit si je do arrey a pak je nadéle v cyklu nějak zpracovávat.

    Takhle to funguje:

    list="$(ls)"

    for file in "$list"

    do

    rm -r "$file"

    done

    Já bych, ale potřeboval načíst pouze soubory a né složky. Takže bych rád místo načtení souboru použil find - nicméně takhle to nefunguje:

    list="$(find -maxdepth 1 -type f)"

    for file in "$list"

    do

    rm -r "$file"

    done


    Řešení dotazu:


    Odpovědi

    Josef Kufner avatar 30.5.2018 14:16 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: bash - načtení názvu souboru & zpracování
    find -maxdepth 1 -type f -exec rm -f -- {} +
    nebo
    find -maxdepth 1 -type f -print0 | xargs -0 rm -f
    Pokud chceš něco složitějšího, tak sáhni po vhodnějším nástroji, než je Bash. Ušetříš si spoustu času a trápení. Tvůj "$list" totiž není pole ale jeden string. Když nenapíšeš uvozovky, tak for bude procházet jednotlivé části toho stringu oddělené $IFS (defaultně mezery), což znamená, že názvy souborů s mezerou se rozpadnou.
    Hello world ! Segmentation fault (core dumped)
    30.5.2018 19:17 Kit | skóre: 46 | Brno
    Rozbalit Rozbalit vše Re: bash - načtení názvu souboru & zpracování
    Načítání seznamu souborů do proměnné je také zvláštnost. Sice to jde, ale obvykle se tento přístup nepoužívá, protože v tom jsou jisté záludnosti. Vždyť adresář je také seznam, tak proč ho nechceš využít k tomuto účelu? Je to mnohem jednodušší a přehlednější.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    30.5.2018 19:43 Andrej | skóre: 51 | blog: Republic of Mordor
    Rozbalit Rozbalit vše Re: bash - načtení názvu souboru & zpracování

    Zmiňuješ pole, ale ve svém skriptu žádné pole nepoužíváš. Proto mi není jasné, co přesně nefunguje. Doporučuji přečíst si kapitolu o polích v manuálové stránce Bashe.

    Následuje varianta tvého skriptu s opravdovým polem, která je ovšem (stejně jako původní skript) velmi špatný nápad, protože nepodporuje soubory s mezerami v názvech. Chybně je rozdělí na několik prvků pole.

    list=($(find -maxdepth 1 -type f))
    for file in "${list[@]}"; do
      rm "$file"
    done
    

    Mimochodem, je škoda nevyužít faktu, že rm přijímá víc argumentů:

    rm "${list[@]}"
    

    Tohle^^^ je ale taky svým způsobem špatně, protože to nebude fungovat, pokud celková délka názvů souborů překročí limit pro velikost pole argv na dané platformě. Proto je lepší použít find ... -exec ... {} +, jak už tu bylo řečeno — tam tento problém nenastane.

    Snad ještě doplním, že budeme-li striktně trvat na poli, samozřejmě existuje i možnost správně podporovat mezery:

    readarray -t list < <(find -maxdepth 1 -type f)
    for file in "${list[@]}"; do
      rm "$file"
    done
    

    Tohle^^^ ale selže pro soubory, které mají v názvu konec řádku. Takové soubory bohužel můžou klidně existovat, čistě teoreticky. Například:

    touch '
    '
    

    Proto je v podstatě jedinou korektní variantou něco na způsob find ... -print0 .... Nebo to celé napsat v jazyce, který důsledně rozlišuje mezi kódem a obsahem proměnných; Bash bohužel míchá obojí dohromady.

    30.5.2018 22:49 Semo | skóre: 45 | blog: Semo
    Rozbalit Rozbalit vše Re: bash - načtení názvu souboru & zpracování
    arr=( * )
    for f in "${arr[@]}"; do
      [[ -f $f ]] && rm -- "$f"
    done
    A kvoli poradiu expanzie (vid man bash) to riesi aj medzery v nazvoch suborov a ine veci. Newliny v nazvoch suborov sice nie, ale kto ich pouziva, tak si za to sam moze.
    If you hold a Unix shell up to your ear, you can you hear the C.

    Založit nové vláknoNahoru

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

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