Yritin kopioida cp-komennolla muutamaa tuhatta (54721 kpl, 286,6 MiB) tiedostoa usb-tikulle. Joudun käyttämään sudoa. Jonkun aikaa kopioituaan tuli virheilmoitus:
sudo: unable to execute /bin/cp: Argument list too long
Linjankatkaisu
Mitenköhän tiedostot saisi kopioitua? Tikulla on reilusti tilaa (yli 22 gigaa), joten siitä ei ainakaan pitäisi olla kyse.
sudo: unable to execute /bin/cp: Argument list too long
Linjankatkaisu
Mitenköhän tiedostot saisi kopioitua? Tikulla on reilusti tilaa (yli 22 gigaa), joten siitä ei ainakaan pitäisi olla kyse.
Vastaukset 14
Vanhimmat
rsync -vaz source target
komentotulkilla on maksimi määrä argumentteja. Oletan että teit cp * /target/, jolloin tuosta *:sta tulee aika pitkä liuta argumentteja.
itse käytän rsync komentoa. sillä voi jatkaa kopiointia ja se tarkistaa että meni oikein.
Pitää joskus perehtyä tuohonkin. Muistaako kukaan miten kopioitiin tiedostot joltain tietyltä väliltä, esim. tiedosto47299.html ... tiedosto80000.html. Tuollaisellekin olisi ollut käyttöä, jottei turhaan kopsailisi samoja tiedostoja useaan kertaan. Graafinen tiedostomanageri menee vähän juntturaan isoilla tiedostomäärillä, joten peruskomennoilla olisi kätevämpi operoida. No nyt on 100000 tiedostoa kuitenkin nipussa jatkokäsittelyä varten.
Autetaan alkuun:
for((i=47299;i<80000;i )); do echo tiedosto$i.html; done
Ja jätetään loppu mietintämyssyn alle. Rsync tekee tuon turhien kopsailujen tarkistuksen automaattisesti. Mutta on se vähän vaarallinenkin, eli pitää tietää miten se toimii!
Kopioi normaalisti graafisessa: kopioi - liitä.
Sudon vuoksi käytin mustaa ruutua. No pakkasin ne tarilla ja sen kopiointi onnistui.
sudo nautilus
Menee näköjään aika hitaaksi tuollaisella tiedostomäärällä. No kyllä tämä tästä. Seuraavaksi alkaa pakertamaan dataa tietokantaan.
Muista myöskin kopioida asyncronoidusti - muuten se synkkaa koko ajan ja kopiointi vie ikuisuuden.
Mitä opimme taas tästä? Ainakin sen että kannattaa siirtyä ammattilaisten tekemiin käyttöjärjestelmiin. Linux-ropelot tuppaa olemaan tuollaisia, edes yksinkertainen tikulle kopioiminen ei meinaa sitten millään onnistua :(
Älä viitsi trollata taas! Linuxit ei ole mitään ropeloita ja kyllä niissä onnistuu tikulle kopioiminen. Ja unohdat (tahallaan) että linuxia kehittää ammattilaiset!
Tällä ei ole määrä rajoitteita, joten näin tehtynä kopioidaan /mistä/ kansion kaikki alikansiotkin
find /mistä/* -exec cp -t /minne/ {}
Jos et halua kopioda kuin sen nimetyn kansion sisällän, tee näin:
find /mistä/* -maxdepth 0 -exec cp -t /minne/ {}
mutta jos haluat ulottaa kopioinin vielä yhden solmus syvemmälle, tee näin:
find /mistä/* -maxdepth 1 -exec cp -t /minne/ {}
no, eiköhän se siitä . . . .
UUSIKSI meni, cp -r täytyy olla kun kansioitakin kopioidaan, joten tässä korjaus, edelliseen:
Tällä ei ole määrä rajoitteita, joten näin tehtynä kopioidaan /mistä/ kansion kaikki alikansiotkin
find /mistä/* -exec cp -r -t /minne/ {}
Jos et halua kopioda kuin sen nimetyn kansion sisällän, tee näin:
find /mistä/* -maxdepth 0 -exec cp -r -t /minne/ {}
mutta jos haluat ulottaa kopioinin vielä yhden solmus syvemmälle, tee näin:
find /mistä/* -maxdepth 1 -exec cp -r -t /minne/ {}
no, eiköhän se siitä . . . .
Onko todella tehty noin helpoksi linuxissa? Eihän siinä ole kuin muutama kymmenen riviä koodia että saa kopioinnin tikulle tehtyä 👍
Komentorivin maksimipituus on 128kt ja tähän voi sijoittaa korkeintaan 2097152 arkumenttia, nämä rajat tulevat helposti vastaan kopioidessa ( cp ) tai poistettaessa ( rm ) tiedostoja. Silloin täytyy suorittaa cp tai rm komento useamin eikä yrittää syöttää kerralla komennolle liian pitkää arkumenttilistaa.