find - subory s dvoma priponami

Sekcia: Aplikácie & Desktop 05.02.2007 | 12:39
Avatar nahnevaný mladý muž gNewSense  Používateľ
Potrebujem pomocou find najst subory s priponou .c alebo .h, zatial to mam takto:

(find ./ -name "*.h"; find ./ -name "*.c")

Ale vyzera to blbo, ako to zapisat do jedneho findu? cosi ako *.[h|c] alebo tak nejak. Vdaka.
    • Re: find - subory s dvoma priponami 05.02.2007 | 12:49
      WlaSaTy   Návštevník
      ano:
      ~ $ mkdir a
      ~ $ touch a/sss.h
      ~ $ touch a/sss.c
      ~ $ touch a/sss.ar
      ~ $ touch a/sss.o
      ~ $ touch a/makefile
      ~ $ touch a/Makefile
      ~ $ find a/ -name \*.[ch]
      a/sss.h
      a/sss.c
      ~ $ rm -fvr a
      removed `a/sss.h'
      removed `a/sss.c'
      removed `a/sss.ar'
      removed `a/sss.o'
      removed `a/makefile'
      removed `a/Makefile'
      removed directory: `a'
      ~ $

      man 1 find
      man 1p find

      • Re: find - subory s dvoma priponami 05.02.2007 | 17:18
        Avatar uid0 Debian  Používateľ
        tomu neverim.

        $ find a/ -name \*.[ch]

        urcite nemohlo fungovat, pretoze to dosadenie vykonal shell a teda nemohol tie subory najst, pretoze nebol v adresari a

        nieco ako toto by uz malo fungovat:

        find a/ -name '*.[ch]'
        Debian. apt-get into it…
        • Re: find - subory s dvoma priponami 05.02.2007 | 21:13
          WlaSaTy   Návštevník
          ked neveris, tak never.

          backslash zrusil specialny znak hviezdicka a v aktualnom adresari som nemal ziadne ceckove zdrojaky a ani ceckove hedre. tym padom shell nemal co doplnit a najme ked som zadal aby vyhladaval v podadresati. myslim ze by si si mohol zopakovat nieco o shell expansion, najme pred tym ako reagujes na prispevok ...

          • Re: find - subory s dvoma priponami 05.02.2007 | 21:45
            Avatar uid0 Debian  Používateľ
            prosim, dokonca aj odkazovany find(1) to tvrdi:
            NON-BUGS
                   $ find . -name *.c -print
                   find: paths must precede expression
                   Usage: find [-H] [-L] [-P] [path...] [expression]
            
                   This happens because *.c has been expanded by the  shell  resulting  in
                   find actually receiving a command line like this:
            
                   find . -name bigram.c code.c frcode.c locate.c -print
            
                   That  command  is of course not going to work.  Instead of doing things
                   this way, you should enclose the pattern in quotes:
                   $ find . -name ´*.c´ -print
            


            tvoj prikaz sposobi toto:

            $ find a/ -name \*.[ch]
            zsh: no matches found: *.[ch]

            bash to mozno zozere (nebudem to skusat), ale davaj si na to pozor
            Debian. apt-get into it…
            • Re: find - subory s dvoma priponami 05.02.2007 | 23:23
              WlaSaTy   Návštevník
              1) ta manualova stranka hovori ze shell expanduje specialne znaky ale akosi si v nej zabudol pozriet ci ich expanduje aj ked je ich specialny vyznam zruseny napriklad pomocou spetneho lomitka. a navyse u mna nemal co expandovat, ako som spominal v aktualnom adresari som nemal take subory a vyhladaval som v podadresari a/.
              2) z kolkych percent je zsh kompatibilny s normou posix ktora je najcastejsie pouzivana v sh-posix? keby sme sa chceli zaoberat odchylkami od standardneho sh ktory je posix pozitivny tak by sme si mohli pozriet ako sa zadava regularny vyraz v napriklad ksh ktory ma dve verzie. jednu komercnu a jednu free/open source, a aj v csh. pri kazdom z tychto interpreterov sa k tomu pristupuje inac.

              no ale aby sme sa nehadali o hovadinach, zadaniu povodnej otazky vyhovuje predanie regularneho vyrazu programu find. to sa deje bud roznymi prapodivnymi zatvorkami (najme v novsich verziach bash ktory sa nie vsade implementuje i ked ho linuxaci pretlacaju ako vlastny a v jeho skutocne rozsirenej verzii aj znacne nekompatibilny standard) alebo jednoducho spetnym lomitkom umiestnenym na vhodnu poziciu.

              v skriptovani zasadne pouzivam interpreter prikazov ktory vychadza z sh-posix, clovek by sa dokazal viac ako prekvapit keby nakopol stroj v servisnom mode a namiesto jeho oblubeneho vycackaneho shellu by pol hodinu buchal do klavesnice bez akehokolvek vysledku. a dokonca aj v linuxovych systemoch kde sa v beznej prevadzke nepouziva sh-posix :)

              na toto si uz roky davam pozor, uz mi to vela krat pomohlo. a v neposlednom rade aj usetrilo cas a aj zachranilo kozu.


              PS.: ten zsh je ten shell ktory vznikol pred cca 10timi rokmi ako parodia na command.com a namiesto .profile pouzival .autoexec.bat? ano, aj taky zsh existoval.
              • Re: find - subory s dvoma priponami 05.02.2007 | 23:42
                Avatar uid0 Debian  Používateľ
                ad 1) a hranate zatvorky uz nie su specialne znaky? ved ti moj shell pise, ze sa ho snazi expandovat. a navyse ta manualova stranka hovori presne o tom co si spravil - neuzavrel si vyraz do uvodzoviek alebo apostrofov, to by malo stacit.

                ad 2) len ci sa tento tvoj prehresok tyka naozaj POSIXu, alebo je to len dalsi "bashism"? ktovie... a spominany csh ma od POSIX velmi daleko...

                > v skriptovani zasadne pouzivam interpreter prikazov ktory vychadza z sh-posix,

                mozem vediet, ktory to je? ja mam na /bin/sh dash...

                ad P.S.) nie, tento vznikol pred cca 17 rokmi
                Debian. apt-get into it…
                • Re: find - subory s dvoma priponami 06.02.2007 | 00:05
                  WlaSaTy   Návštevník
                  ja som hovoril o sh-posix ktory pouzivam nielen na linuxe ale aj na inych operacnych systemoch. a skus si prosim ta pozriet o com je regex, nemyslim ze by si mal akykolvek zaujem vediet o com hovoris.
                  • Re: find - subory s dvoma priponami 06.02.2007 | 00:11
                    Avatar uid0 Debian  Používateľ
                    > ja som hovoril o sh-posix
                    > v skriptovani zasadne pouzivam interpreter prikazov ktory vychadza z sh-posix

                    he?

                    > nemyslim ze by si mal akykolvek zaujem vediet o com hovoris.

                    mozes to konkretizovat? nejak nechapem o com hovoris. alebo mi chces tvrdit, ze hranate zatvorky nepatria pod regexpy a ze globing mojho shellu robi zle, ze ich expanduje?
                    Debian. apt-get into it…
                    • Re: find - subory s dvoma priponami 06.02.2007 | 00:19
                      WlaSaTy   Návštevník
                      > he?
                      skus si porovnat rozne distribucie - operacne systemy a zbadas ako sa v nich bude chovat urcity navyknuty sposob pisania skriptov pokial pouzijes single user mod. ten, ktory pouziva najuniverzalnejsi shell. ale, to sa asi naucis ked dostanes do ruky aj iny stroj ako tvoju workstation.

                      > mozes to konkretizovat?
                      man 7 regex
                      a podobne, myslim ze rtfm prestava pre teba existovat.
                      • Re: find - subory s dvoma priponami 06.02.2007 | 14:02
                        Avatar uid0 Debian  Používateľ
                        > skus si porovnat rozne distribucie - operacne systemy a zbadas ako sa v nich bude chovat urcity navyknuty sposob pisania skriptov pokial pouzijes single user mod. ten, ktory pouziva najuniverzalnejsi shell.

                        vobec nechapem co tym chces povedat? ja ti tu stale hovorim, ze sa nemozes spoliehat na to, ze ti to shell nebude expandovat a mas to uzatvarat do zatvoriek. co stale nechapes? aj v manuali ti to pisu.

                        > ale, to sa asi naucis ked dostanes do ruky aj iny stroj ako tvoju workstation.

                        co to s tym ma spolocne? ja ti tu hovorim spravny a spolahlivy sposob a ty tu tocis o neviemcom...

                        > man 7 regex
                        A bracket expression is a list of characters enclosed in `[]'.

                        este nieco? moj shell to expanduje, pravdepodobne sa to da nastavit aj v bashi cez rozne GLOB nastavenia...
                        Debian. apt-get into it…
                        • Re: find - subory s dvoma priponami 06.02.2007 | 16:22
                          WlaSaTy   Návštevník
                          > ja ti tu stale hovorim, ze sa nemozes spoliehat na to, ze ti to shell nebude expandovat a mas to uzatvarat do zatvoriek.

                          sh-posix sa standardne pouziva na vsetkych mne dostupnych systemoch a s nim je kompatibilnych najviac shellov. pozor, tato veta nie obojsmerna a ked to nechapes, tak je to tvoja vec.

                          > moj shell to expanduje

                          ak to expanduje tebou pouzity shell, tak je to jeho vec. mnou pouzity shell na roznych strojoch nema co expandovat pretoze nenasiel ani jeden subor v aktualnom adresari ktory sa vola *.h alebo *.c (pozor, nie subor ktoreho meno vyhovuje regexp *.[ch] alebo *.c alebo *.h) takze logicky nemal co expandovat. to ze tebou pouzity shell bez ohladu na to ci mal expandovat tak ucinil a sposobil chybu je tvoja nazvime to vymozenost i ked z mojho a nielen mojho pohladu sa jedna o chybu. interpreter totizto nema co expandovat regexp ak ho nema na co expandovat. vidim ze si ten manual precital, pochopil a vyskusal si prikazy pomocou prikladov.
                          • Re: find - subory s dvoma priponami 06.02.2007 | 17:09
                            Avatar uid0 Debian  Používateľ
                            uz ma nebavi opakovat stale to iste. kvoli tebe nebudem prehladavat Single Unix specifikaciu, ci je tam naozaj specifikovane, ze to nema expandovat. ja si budem radsej pisat uvodzovky, urcite ma to nezastihne nepripraveneho ak by sa tam nahodou take subory nachadzali. ty si rob co chces a slepo ver svojmu sh-posix :x
                            Debian. apt-get into it…
                            • Re: find - subory s dvoma priponami 06.02.2007 | 22:17
                              WlaSaTy   Návštevník
                              posix je norma ktorej sa oplati verit, zatial ma nesklamala.
                              • Re: find - subory s dvoma priponami 06.02.2007 | 22:23
                                Avatar uid0 Debian  Používateľ
                                ale nezaruci ti, ze sa v aktualnom adresari nenachadza *.[ch]
                                Debian. apt-get into it…
                                • Re: find - subory s dvoma priponami 06.02.2007 | 23:02
                                  WlaSaTy   Návštevník
                                  mas nejaky dovod tvrdit ze norma musi zarucit to, co je v kompetencii obsluhy?

                                  ak sa obsluha rozhodne ze vytvori subor "*.h" alebo "*.c" tak tie budu tak isto vyhovovat danemu vyrazu, schvalne si to vyskusaj. a pridaj si k tomu vymazanie suboru ktoreho nazov sa zacina minusom alebo znakom ~, potom pochopis preco to posix kompatibilny shell bezdovodne neexpandoval a tebou pouzity shell zlyhal na plnej ciare.
                                  • Re: find - subory s dvoma priponami 06.02.2007 | 23:27
                                    Avatar uid0 Debian  Používateľ
                                    % touch ./\-bla ./\~
                                    % rm ./\~ ./-bla

                                    este nieco?

                                    ako myslis. uz vazne koncim...
                                    Debian. apt-get into it…
                                    • Re: find - subory s dvoma priponami 06.02.2007 | 23:50
                                      WlaSaTy   Návštevník
                                      ak ti to pomoze ...

                                      ale skus to spravit v napriklad total commanderi.

                                      ps.: touch -- -bla && rm -- -bla
                                      • Re: find - subory s dvoma priponami 07.02.2007 | 00:46
                                        Avatar nahnevaný mladý muž gNewSense  Používateľ
                                        Netusil som ze tu rozputam takyto flejm, hosi. Nechcete si ich ist radsej zmerat?
                                        • Re: find - subory s dvoma priponami 07.02.2007 | 11:25
                                          WlaSaTy   Návštevník
                                          potom ta zavolame.
                                          bude svedsky stol, budes si moct vybrat.
    • Re: find - subory s dvoma priponami 05.02.2007 | 14:36
      wolf09   Návštevník
      lze to udelat ruzne :
      find ./ -name "*/[ch]"
      nebo
      find ./ -name "*.c" -o name "*.h"
      • Re: find - subory s dvoma priponami 05.02.2007 | 14:38
        wolf09   Návštevník
        oprava :
        find ./ -name "*.[ch]"
        • Re: find - subory s dvoma priponami 05.02.2007 | 16:25
          Avatar nahnevaný mladý muž gNewSense  Používateľ
          a ako zobrazy subory .cc a .h ale nie subory .ch ?
          • Re: find - subory s dvoma priponami 05.02.2007 | 17:29
            Avatar uid0 Debian  Používateľ
            podla manualu pouziva defaultne emacs regexpy, ale regexp, ktory som si vyskusal priamo v emacs mi vo finde nefunguje:

            .+\.\(cc\|h\)$
            Debian. apt-get into it…
            • Re: find - subory s dvoma priponami 05.02.2007 | 23:29
              WlaSaTy   Návštevník
              ty koki, ze by find linkovali oproti emacs namiesto regex? dnes srsis humorom.

              ako si si iste vsimol, tak manualova stranka pre find ma sekciu see also kde je odkaz na regex(7) a to nie je emacs.
          • Re: find - subory s dvoma priponami 06.02.2007 | 10:10
            wolf09   Návštevník
            find ./ -name "*.[ch]" -o name "*.cc"
            *.[ch] najde .c a .h
            *.cc jen .cc -o je or
            pripadne se pridaji jeste zavorky

            RTFM