Kirjoittaja Aihe: Kuinka argumenttilistaa voi pidentää ?  (Luettu 3003 kertaa)

kamara

  • Käyttäjä
  • Viestejä: 3011
    • Profiili
Kuinka argumenttilistaa voi pidentää ?
« : 26.09.15 - klo:11.00 »
Pitäisi poistaa pari tiedostoa, mutta antaa tällaista herjaa...
Koodia: [Valitse]
$ rm *
bash: /bin/rm: Argumenttilista on liian pitkä

Tiedostoja on vaivaiset n. 175000 kpl.

nm

  • Käyttäjä
  • Viestejä: 16356
    • Profiili
Vs: Kuinka argumenttilistaa voi pidentää ?
« Vastaus #1 : 26.09.15 - klo:11.20 »
for-loopilla tai findilla voi kiertää tuon rajoitteen: http://stackoverflow.com/a/18647755

kamara

  • Käyttäjä
  • Viestejä: 3011
    • Profiili
Vs: Kuinka argumenttilistaa voi pidentää ?
« Vastaus #2 : 26.09.15 - klo:12.19 »
for-loopilla tai findilla voi kiertää tuon rajoitteen: http://stackoverflow.com/a/18647755

Joo. Eräänlaisen purkkaratkaisun tein itsekin.

Eli tämän. Ei ole kaunis, mutta on toimiva.
Koodia: [Valitse]
rm *1.*
rm *2.*
rm *3.*
rm *4.*
rm *5.*
rm *6.*
rm *7.*
rm *8.*
rm *9.*
rm *

Postimies

  • Käyttäjä
  • Viestejä: 2636
    • Profiili
Vs: Kuinka argumenttilistaa voi pidentää ?
« Vastaus #3 : 26.09.15 - klo:19.24 »
Mikähän mahtaa olla raj? mc:llä olen muistaakseni poistanut esim. /usr jossa yli 350 000 tiedostoa. Ihan koko jakelua en ole uskaltanut poistaa kerralla. Tuossa Gentoon portage sisältää paljon kamaa. rm olisi nopeampi, mutta sillä ei saa kämmätä

kamara

  • Käyttäjä
  • Viestejä: 3011
    • Profiili
Vs: Kuinka argumenttilistaa voi pidentää ?
« Vastaus #4 : 26.09.15 - klo:20.35 »
Mikähän mahtaa olla raj? mc:llä olen muistaakseni poistanut esim. /usr jossa yli 350 000 tiedostoa. Ihan koko jakelua en ole uskaltanut poistaa kerralla.

Toimiiko mc scripteissä ?

nm

  • Käyttäjä
  • Viestejä: 16356
    • Profiili
Vs: Kuinka argumenttilistaa voi pidentää ?
« Vastaus #5 : 27.09.15 - klo:00.58 »
Mikähän mahtaa olla raj?

Argumenttilistan pituus merkkeinä selviää Linuxissa komennolla:

Koodia: [Valitse]
getconf ARG_MAX
Omassa järjestelmässäni saan arvon 2097152. Nykyisin tuota voi säätää ajonaikana kasvattamalla pinon kokoa (oletuksena 8 MB, ja ARG_MAX on neljäsosa siitä). Jos tiedostonimen pituus on keskimäärin 12 merkkiä ja nimet erotellaan yhdellä merkillä, listaan mahtuu n. 160 000 tiedostoa.

Tässä lisää kyseisestä rajoitteesta: http://www.in-ulm.de/~mascheck/various/argmax/

mc:llä olen muistaakseni poistanut esim. /usr jossa yli 350 000 tiedostoa.

Kyllähän rm -R poistaa /usr:n ilman tuota varoitusta, koska kyseisen komennon argumenttilistan pituus on vain 7 merkkiä (plus ympäristömuuttujat). Kamaran tapauksessa yhdessä hakemistossa oli törkeä määrä tiedostoja, ja komentotulkin *-ekspansio täytti argumenttilistan tiedostojen nimillä. Jos hakemiston voi poistaa rekursiivisesti, eli alihakemistot ja hakemiston itsensä saa poistaa myös, -R toimii tässäkin.

kamara

  • Käyttäjä
  • Viestejä: 3011
    • Profiili
Vs: Kuinka argumenttilistaa voi pidentää ?
« Vastaus #6 : 27.09.15 - klo:17.34 »
Tiedostoja on vaivaiset n. 175000 kpl.

Oma ennätykseni on yli 220000 kpl yhdessä kansiossa (tavuina vajaa 400 Gt). No, scriptini näyttäisi toimivan kuitenkin.

Postimies

  • Käyttäjä
  • Viestejä: 2636
    • Profiili
Vs: Kuinka argumenttilistaa voi pidentää ?
« Vastaus #7 : 27.09.15 - klo:22.39 »
Mikähän mahtaa olla raj? mc:llä olen muistaakseni poistanut esim. /usr jossa yli 350 000 tiedostoa. Ihan koko jakelua en ole uskaltanut poistaa kerralla.

Toimiiko mc scripteissä ?

mc eli Midnight Commander. Merkkipohjainen tiedostoselain. Pidän tuosta kun on vikkelä ja kun tarvitsen
root oikeuksia. Dolphin yleensä käytössä, mutta periaatteesta en käytä sitä root oikeuksilla.  mc osaa
siirtää myös verkon yli tiedostoja. Ei toimi scripteissä mutta niitä on sillä helppo editoida ja ajaa.