Fórum Root.cz

Hlavní témata => Software => Téma založeno: PAvel2 25. 08. 2015, 18:20:04

Název: Příkaz find - interval
Přispěvatel: PAvel2 25. 08. 2015, 18:20:04
Ahoj,
potreboval bych pomoct s prikazem find.

Mam soubory file100 az file340

potrebuji findem najit soubory file110 - file300

Bohuzel prikaz jako find . -name file{110..300} nefunguje...
Název: Re:Příkaz find - interval
Přispěvatel: peter 25. 08. 2015, 18:31:42
To už začala škola že sa tu objavujú úlohy z využitia find, priamo alebo v pytónovi?
Název: Re:Příkaz find - interval
Přispěvatel: Mirek Prýmek 25. 08. 2015, 18:51:55
man find:

Citace
     -name pattern
             True if the last component of the pathname being examined matches pattern.  Special shell pattern matching characters
             (``['', ``]'', ``*'', and ``?'') may be used as part of pattern.
o x..y se tam nic nepíše.
Název: Re:Příkaz find - interval
Přispěvatel: fadhy 25. 08. 2015, 19:21:01
Něco jako
Kód: [Vybrat]
find $dest -name "file???" -exec bash -c '[x={}; ${x:4} -ge 100 ] && [ ${x:4} -le 300 ]' ale asi to nebude uplně efektivní.
Název: Re:Příkaz find - interval
Přispěvatel: Zopper 26. 08. 2015, 08:52:13
man find:

Citace
     -name pattern
             True if the last component of the pathname being examined matches pattern.  Special shell pattern matching characters
             (``['', ``]'', ``*'', and ``?'') may be used as part of pattern.
o x..y se tam nic nepíše.

To proto, že {x..y} je shellová věc.

Kód: [Vybrat]
$ echo {10..20}
10 11 12 13 14 15 16 17 18 19 20
Název: Re:Příkaz find - interval
Přispěvatel: Mirek Prýmek 26. 08. 2015, 09:30:20
To proto, že {x..y} je shellová věc.
No jasně - a proto to nefunguje. Ještě přesněji je to bashová věc, klasický "sh" to taky neumí:

Kód: [Vybrat]
$ /bin/sh
$ echo {10..20}
{10..20}
Název: Re:Příkaz find - interval
Přispěvatel: Zopper 26. 08. 2015, 10:31:35
V jiné situaci ale tahle expanze udělá co má. Můj první nápad co zkusit by asi byl podobný jako u tazatele: hodit findu explicitně povolené varianty souborů.

A s označením bashismus bych byl opatrný - klasický "sh" neumí skoro nic. Tohle je ale něco, co zvládají i jiné shelly než jen Bash. Namátkou ZSH a KSH. Proto jsem konkrétní shell neuvedl.
Název: Re:Příkaz find - interval
Přispěvatel: Mirek Prýmek 26. 08. 2015, 13:40:50
V jiné situaci ale tahle expanze udělá co má. Můj první nápad co zkusit by asi byl podobný jako u tazatele: hodit findu explicitně povolené varianty souborů.
Já jsem se jenom snažil říct, že tazatel si musí uvědomit, jaké parametry jakému programu předává. Buď chce použít find, a pak musí použít jenom ty konstrukce, které find podporuje, nebo chce použít shellovou expanzi, a pak find nepotřebuje/nechce.

Prostě buď "rm {100...300}" nebo "find ... -name ... něco něco", ale ne kombinace těchto dvou věcí, ta nefunguje.