Příkaz find - interval

PAvel2

Příkaz find - interval
« kdy: 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...


peter

Re:Příkaz find - interval
« Odpověď #1 kdy: 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?

Re:Příkaz find - interval
« Odpověď #2 kdy: 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.

fadhy

Re:Příkaz find - interval
« Odpověď #3 kdy: 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í.

Zopper

  • *****
  • 920
    • Zobrazit profil
Re:Příkaz find - interval
« Odpověď #4 kdy: 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


Re:Příkaz find - interval
« Odpověď #5 kdy: 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}

Zopper

  • *****
  • 920
    • Zobrazit profil
Re:Příkaz find - interval
« Odpověď #6 kdy: 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.

Re:Příkaz find - interval
« Odpověď #7 kdy: 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.