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:55 | Nová verze

    Po více než 7 měsících vývoje od vydání verze 6.8 byla vydána nová verze 6.9 svobodného open source redakčního systému WordPress. Kódové jméno Gene bylo vybráno na počest amerického jazzového klavíristy Gene Harrise (Ray Brown Trio - Summertime).

    Ladislav Hagara | Komentářů: 1
    dnes 05:11 | Komunita

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

    Ladislav Hagara | Komentářů: 0
    dnes 01:55 | Nová verze

    Google Chrome 143 byl prohlášen za stabilní. Nejnovější stabilní verze 143.0.7499.40 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 13 bezpečnostních chyb.

    Ladislav Hagara | Komentářů: 0
    včera 19:33 | Nová verze

    Společnost Valve aktualizovala přehled o hardwarovém a softwarovém vybavení uživatelů služby Steam. Podíl uživatelů Linuxu dosáhl 3,2 %. Nejčastěji používané linuxové distribuce jsou Arch Linux, Linux Mint a Ubuntu. Při výběru jenom Linuxu vede SteamOS Holo s 26,42 %. Procesor AMD používá 66,72 % hráčů na Linuxu.

    Ladislav Hagara | Komentářů: 0
    včera 15:22 | IT novinky

    Canonical oznámil (YouTube), že nově nabízí svou podporu Ubuntu Pro také pro instance Ubuntu na WSL (Windows Subsystem for Linux).

    Ladislav Hagara | Komentářů: 0
    včera 13:11 | IT novinky

    Samsung představil svůj nejnovější chytrý telefon Galaxy Z TriFold (YouTube). Skládačka se nerozkládá jednou, ale hned dvakrát, a nabízí displej s úhlopříčkou 10 palců. V České republice nebude tento model dostupný.

    Ladislav Hagara | Komentářů: 2
    včera 12:33 | Nová verze

    Armbian, tj. linuxová distribuce založená na Debianu a Ubuntu optimalizovaná pro jednodeskové počítače na platformě ARM a RISC-V, ke stažení ale také pro Intel a AMD, byl vydán ve verzi 25.11.1. Přehled novinek v Changelogu.

    Ladislav Hagara | Komentářů: 1
    včera 04:00 | Nová verze

    Byla vydána nová verze 15.0 svobodného unixového operačního systému FreeBSD. Podrobný přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 6
    včera 03:00 | Nová verze

    UBports, nadace a komunita kolem Ubuntu pro telefony a tablety Ubuntu Touch, vydala Ubuntu Touch 24.04 1.1 a 20.04 OTA-11. Vedle oprav chyb a drobných vylepšení je řešen také středně závažný bezpečnostní problém.

    Ladislav Hagara | Komentářů: 0
    včera 00:33 | IT novinky Ladislav Hagara | Komentářů: 0
    Jaké řešení používáte k vývoji / práci?
     (34%)
     (47%)
     (19%)
     (18%)
     (23%)
     (15%)
     (25%)
     (16%)
     (18%)
    Celkem 426 hlasů
     Komentářů: 18, poslední včera 18:34
    Rozcestník

    Dotaz: procházení adresářů a kopírování souborů a jejich přejmenování jinam

    23.11.2018 10:42 Honza
    procházení adresářů a kopírování souborů a jejich přejmenování jinam
    Přečteno: 469×
    Mám adresáře A1-A12, B1-B12 atd. a v každém je soubor s názvem "assembly.fa", ale jeho obsah je v každém adresáři jiný. Potřebuji tyto soubory překopírovat třeba do /home s tím, že se soubor přejmenuje podle názvu adresáře. Tj. z adresáře A1 se bude jmenovat A1assembly.fa atd.. Nezvládl by někdo script, který to udělá? Přiznávám, že programovat neumím, tak píšu sem. Díky

    Řešení dotazu:


    Odpovědi

    23.11.2018 11:12 debian+
    Rozbalit Rozbalit vše Re: procházení adresářů a kopírování souborů a jejich přejmenování jinam
    Obsahuj adresare medzeru?
    Řešení 1× (Filip Jirsák)
    23.11.2018 11:20 Andrej | skóre: 51 | blog: Republic of Mordor
    Rozbalit Rozbalit vše Re: procházení adresářů a kopírování souborů a jejich přejmenování jinam
    cd '/zdrojový/adresář'
    for dir in {A..B}{1..12}; do
      cp "${dir}/assembly.fa" '/cílový/adresář/'"${dir}assembly.fa"
    done
    
    23.11.2018 11:29 Andrej | skóre: 51 | blog: Republic of Mordor
    Rozbalit Rozbalit vše Re: procházení adresářů a kopírování souborů a jejich přejmenování jinam

    Tohle^^^ tedy samozřejmě předpokládá, že jsou všechny ty adresáře v jednom a tom samém společném adresáři. Tady je jednoduchý ilustrativní příklad / test:

    mkdir nějaký_pokus cíl
    cd nějaký_pokus
    mkdir {A..B}{1..12}
    touch {A..B}{1..12}/assembly.fa
    cd ..
    for dir in {A..B}{1..12}; do
      cp "nějaký_pokus/${dir}/assembly.fa" "cíl/${dir}assembly.fa"
    done
    ls -l cíl
    rm -Rf nějaký_pokus cíl
    
    23.11.2018 11:49 Andrej | skóre: 51 | blog: Republic of Mordor
    Rozbalit Rozbalit vše Re: procházení adresářů a kopírování souborů a jejich přejmenování jinam

    Pokud ty adresáře můžou být libovolně vnořené v jiných adresářích, tak třeba takto:

    find zdroj -type d -regextype awk -regex '.*[AB](1[0-2]?|[2-9])' \
    | while read dir; do
        cp "${dir}/assembly.fa" "cíl/$(basename "${dir}")assembly.fa"
      done
    

    Opět ukázka s triviálním testem (která sice netestuje hlubší zanoření adresářů, protože jsem extrémně líný, ale mělo by to i s hlubším zanořením fungovat):

    mkdir 'zdroj' 'cíl'
    mkdir 'zdroj/'{A..B}{1..12}
    touch 'zdroj/'{A..B}{1..12}'/assembly.fa'
    find zdroj -type d -regextype awk -regex '.*[AB](1[0-2]?|[2-9])' \
    | while read dir; do
        cp "${dir}/assembly.fa" "cíl/$(basename "${dir}")assembly.fa"
      done
    ls -l 'cíl'
    rm -Rf 'zdroj' 'cíl'
    
    23.11.2018 12:44 Honza
    Rozbalit Rozbalit vše Re: procházení adresářů a kopírování souborů a jejich přejmenování jinam
    Perfektní, funguje to. Ušetří mě to případných chyb při otravném ručním přepisování. Díky moc!
    23.11.2018 11:34 debian+
    Rozbalit Rozbalit vše Re: procházení adresářů a kopírování souborů a jejich přejmenování jinam
    Skopiruj, prepis do terminalu a na zaciatku prikazu si nastav premenna (dopis do uvodzoviek), ze z kadial (odkial) a kam ma skopirovat. A medzera nesmie byt v nazve KAM a Z (ak by treba, povedz, osetrim). V ich podadresarov moze.
    KAM=""; Z=""; find $Z -name "assembly.fa" -exec echo "cp -v '{}' $KAM/\'\`echo {}|tr / _\`\'" \; |bash
    A u mna "demo" (pouzil som absolutne cesty, mozes pouzit i relativne):
    $ KAM="/tmp/kam"; Z="/tmp/z/"; find $Z -name "assembly.fa" -exec echo "cp -v '{}' $KAM/\'\`echo {}|tr / _\`\'" \; |bash 
    '/tmp/z/b/assembly.fa' -> "/tmp/kam/'_tmp_z_b_assembly.fa'"
    '/tmp/z/a/assembly.fa' -> "/tmp/kam/'_tmp_z_a_assembly.fa'"
    $ 
    23.11.2018 14:03 Honza
    Rozbalit Rozbalit vše Re: procházení adresářů a kopírování souborů a jejich přejmenování jinam
    Opet perfektni. Take dekuju.
    Řešení 1× (Filip Jirsák)
    Josef Kufner avatar 23.11.2018 12:08 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: procházení adresářů a kopírování souborů a jejich přejmenování jinam
    Prostě stačí přejmenovat tak, že odstraníš lomítko.
    rename 's/\///' */assembly.fa
    Hello world ! Segmentation fault (core dumped)
    23.11.2018 13:54 Honza
    Rozbalit Rozbalit vše Re: procházení adresářů a kopírování souborů a jejich přejmenování jinam
    Script od Andreje jeste chapu, rename 's/\///' */assembly.fa je na me uz hardcore. Ale taky to funguje. Take diky.
    k3dAR avatar 23.11.2018 17:14 k3dAR | skóre: 63
    Rozbalit Rozbalit vše Re: procházení adresářů a kopírování souborů a jejich přejmenování jinam
    Jde o sed syntax 's/neco/zaneco/' s je najdi a zamen, / je vychozi oddelovac, protoze chces nahradit / musis ho escapovat znakem \, protoze nechces / nahradit ale odstranit tak "zaneco" nechas prazdne... pro lepsi pochopeni lze zmenit oddelovac na "cokoliv" jineho, treba #, pak by to u tebe bylo 's#/##', muzes si to vyzkouset se sedem:
    echo "nazdar honzo" | sed 's/nazdar/ahoj/'
    Pokud by se meli zmeni vsechny vyskyty na radku, pridas na konec g: 's/neco/zaneco/g'
    porad nemam telo, ale uz mam hlavu... nobody
    23.11.2018 17:47 Andrej | skóre: 51 | blog: Republic of Mordor
    Rozbalit Rozbalit vše Re: procházení adresářů a kopírování souborů a jejich přejmenování jinam

    To je skript pro sed (stream editor). Úvodní s znamená nahrazení (substitute) a pak následují dva výrazy oddělené (v tomto případě) lomítky, první je regulární výraz a druhý je šablona k nahrazení. Nelze než doporučit manuálové stránky, protože tohle vyžaduje pochopení rour (pipe) a regulárních výrazů.

    Ještě bych doplnil, že pro jednoduché případy umí přesně tohle i samotný shell při expanzi proměnných a není tedy nezbytně potřeba další proces.

    text='aabbcc'
    echo "${text}"          # aabbcc
    echo "${text/b/z}"      # aazbcc
    echo "${text//b/z}"     # aazzcc
    echo "${text/[ac]/z}"   # zabbcc
    echo "${text/%[ac]/z}"  # aabbcz
    echo "${text//[ac]/z}"  # zzbbzz
    

    Význam jednotlivých znaků je popsaný v man bash, kapitola Expansion / Parameter Expansion.

    27.11.2018 08:58 Aleš Kapica | skóre: 52 | blog: kenyho_stesky | Ostrava
    Rozbalit Rozbalit vše Re: procházení adresářů a kopírování souborů a jejich přejmenování jinam
    Pozor. Tohle nemusí fungovat by default. Pro jistotu doporučuji do skriptu na začátek přidat:
    …
    shopt -s extglob
    …
    
    27.11.2018 12:13 Andrej | skóre: 51 | blog: Republic of Mordor
    Rozbalit Rozbalit vše Re: procházení adresářů a kopírování souborů a jejich přejmenování jinam

    Žádný z mnou uvedených příkladů nevyžaduje extglob, pokud se nepletu. Ten bývá většinou implicitně zapnutý, ale aby ho člověk fakt využil, musel by tam jako pattern zapsat něco z tohoto:

           If  the  extglob  shell option is enabled using the shopt builtin, several
           extended pattern matching operators  are  recognized.   In  the  following
           description, a pattern-list is a list of one or more patterns separated by
           a |.  Composite patterns may be formed using one or more of the  following
           sub-patterns:
    
                  ?(pattern-list)
                         Matches zero or one occurrence of the given patterns
                  *(pattern-list)
                         Matches zero or more occurrences of the given patterns
                  +(pattern-list)
                         Matches one or more occurrences of the given patterns
                  @(pattern-list)
                         Matches one of the given patterns
                  !(pattern-list)
                         Matches anything except one of the given patterns
    
    27.11.2018 13:30 Aleš Kapica | skóre: 52 | blog: kenyho_stesky | Ostrava
    Rozbalit Rozbalit vše Re: procházení adresářů a kopírování souborů a jejich přejmenování jinam
    Dík za upřesnění. Využívám toho docela hodně, a bylo pro mne bylo docela překvapení, když byl ten extglob vypnutý, proto ho ve skriptech pro jistotu zapínám. Typicky toho využívám třeba v situaci, když chci ořezat textový řetězec, pro různé testy, atp.
    23.11.2018 17:27 Andrej | skóre: 51 | blog: Republic of Mordor
    Rozbalit Rozbalit vše Re: procházení adresářů a kopírování souborů a jejich přejmenování jinam

    On to ale chtěl zkopírovat, zatímco rename všechno přesouvá (jako mv).

    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.