openSUSEa suomeksi
Muut => Yleinen keskustelualue => Aiheen aloitti: jkaija - 14.02.2010 - klo:20:19
-
Moro,
Olisi tarve saada kopioitua tiettyjen kansioiden sisältö yhteen kansioon ylikirjoittaen jo kansiossa oleva tieto.
Eli lähtö kansiot olisi
/srv/www/htdocs/zm/events/4
jossa on alikansiot 1,2,3,4,5 jne., joita tulee automaattisesti lisää
kohde kansio olisi
/srv/www/htdocs/koti/images/webcam/cam1/
johon ei saa tulla alikansiota ainoastaan ne kuvat noista lähtökansiosta ja jos on saman nimisiä kuvia niin ne ylikirjoitetaan.
cp -f -r -t /srv/www/htdocs/koti/images/webcam/cam1 /srv/www/htdocs/zm/events/4/
ei toimi se kopioi myös kansiot.
Ilmeisesti pitäisi tehdä jonkinlainen skripti, osaisko joku auttaa ???
-
Kokeilin tätä
~/xDocs/test> mkdir kohde
~/xDocs/test> mkdir lähde
~/xDocs/test> mkdir lähde/1
~/xDocs/test> mkdir lähde/2
~/xDocs/test> mkdir lähde/3
~/xDocs/test> touch lähde/1/a.txt
~/xDocs/test> touch lähde/2/b.txt
~/xDocs/test> touch lähde/3/c.txt
~/xDocs/test> touch lähde/3/b.txt
~/xDocs/test> cp lähde/*/* kohde
cp: will not overwrite just-created `kohde/b.txt' with `lähde/3/b.txt'
~/xDocs/test> ls kohde
a.txt b.txt c.txt
eli vain ensimmäinen lähteen samannimisistä tiedostoista kopioituu. Ylikirjoitusmoodiksi voi valita joko --force tai --remove-destination, mutta se ei vaikuta samannimisten lähdetiedostojen valintaan. Jos lähteitten syvyys vaihtelee, voi cp:lle syöttää tiedostolistan find:sta.
OS 11.2, GNU bash, version 4.0.35(1)-release (x86_64-suse-linux-gnu)
-
Tiedostolistan syöttö find:sta
~/xDocs/test> rm kohde/*
~/xDocs/test> ls kohde
~/xDocs/test> cp $(find lähde -type f -print) kohde
cp: will not overwrite just-created `kohde/b.txt' with `lähde/3/b.txt'
~/xDocs/test> ls kohde
a.txt b.txt c.txt
~/xDocs/test>
-
tässä sama find toisessa muodossa
find /srv/www/htdocs/zm/events/ -type f -exec cp {} /srv/www/htdocs/koti/images/webcam/cam1/ \;
-
@linux-poyta:~> cp --force /srv/www/htdocs/zm/events/4/*/* /srv/www/htdocs/koti/images/webcam/cam2
cp: ei korvata juuri luotua tiedostoa ”/srv/www/htdocs/koti/images/webcam/cam2/079-capture.jpg” tiedostolla ”/srv/www/htdocs/zm/events/4/174/079-capture.jpg”
.
.
cp --remove-destination /srv/www/htdocs/zm/events/4/*/* /srv/www/htdocs/koti/images/webcam/cam2
cp: ei korvata juuri luotua tiedostoa ”/srv/www/htdocs/koti/images/webcam/cam2/079-capture.jpg” tiedostolla ”/srv/www/htdocs/zm/events/4/174/079-capture.jpg”
.
.
@linux-poyta:~> cp $(find /srv/www/htdocs/zm/events/4/*/* -type f -print) /srv/www/htdocs/koti/images/webcam/cam2
cp: ei korvata juuri luotua tiedostoa ”/srv/www/htdocs/koti/images/webcam/cam2/079-capture.jpg” tiedostolla ”/srv/www/htdocs/zm/events/4/174/079-capture.jpg”
.
.
Eli noi ei kirjoita toisten päälle ?
kokeilenpa tuota viimeistä minkä laitoit
@linux-poyta:~> find /srv/www/htdocs/zm/events/ -type f -exec cp {} /srv/www/htdocs/koti/images/webcam/cam2/
find: "-exec":n parametri puuttuu
???
-
muistithan laittaa tonne komennon loppuun ton \;
-
muistithan laittaa tonne komennon loppuun ton \;
no mutta kun se näytti ihan hymiöltä :D
@linux-poyta:~> find /srv/www/htdocs/zm/events/ -type f -exec cp {} /srv/www/htdocs/koti/images/webcam/cam2/ \;
cp: tavallisen tiedoston ”/srv/www/htdocs/koti/images/webcam/cam2/.directory” luominen ei onnistu: Lupa evätty
cp: tavallisen tiedoston ”/srv/www/htdocs/koti/images/webcam/cam2/.directory” luominen ei onnistu: Lupa evätty
cp: tavallisen tiedoston ”/srv/www/htdocs/koti/images/webcam/cam2/.directory” luominen ei onnistu: Lupa evätty
cp: tavallisen tiedoston ”/srv/www/htdocs/koti/images/webcam/cam2/.directory” luominen ei onnistu: Lupa evätty
pitääpä tarkistaa mitä se nyt teki...
-
Eli noi ei kirjoita toisten päälle ?
Ei, jos useammassa lähtökansiossa on samanniminen tiedosto, niin vain ensimmäinen kirjoittuu,. Kylläkin jo kohteessa olleen samannimisen päälle, jos siellä sellainen oli.
-
muistithan laittaa tonne komennon loppuun ton \;
no mutta kun se näytti ihan hymiöltä :D
@linux-poyta:~> find /srv/www/htdocs/zm/events/ -type f -exec cp {} /srv/www/htdocs/koti/images/webcam/cam2/ \;
cp: tavallisen tiedoston ”/srv/www/htdocs/koti/images/webcam/cam2/.directory” luominen ei onnistu: Lupa evätty
cp: tavallisen tiedoston ”/srv/www/htdocs/koti/images/webcam/cam2/.directory” luominen ei onnistu: Lupa evätty
cp: tavallisen tiedoston ”/srv/www/htdocs/koti/images/webcam/cam2/.directory” luominen ei onnistu: Lupa evätty
cp: tavallisen tiedoston ”/srv/www/htdocs/koti/images/webcam/cam2/.directory” luominen ei onnistu: Lupa evätty
pitääpä tarkistaa mitä se nyt teki...
Joo kyllä toimii, kellonajat vaihtuu tiedostoissa. :)
Kiitos.
-
Eli noi ei kirjoita toisten päälle ?
Ei, jos useammassa lähtökansiossa on samanniminen tiedosto, niin vain ensimmäinen kirjoittuu,. Kylläkin jo kohteessa olleen samannimisen päälle, jos siellä sellainen oli.
... no hyvin se kuitenkin toimi vaikka se ilmoitti
cp: ei korvata juuri luotua tiedostoa ”/srv/www/htdocs/koti/images/webcam/cam2/079-capture.jpg” tiedostolla ”/srv/www/htdocs/zm/events/4/174/079-capture.jpg”
Tajusin nyt vasta tarkistaa ne tiedoston luonti ajat. ;)[/s]
eli uudet ei kopioidu vanhojen päälle :-\
-
Kopiointijärjestystä voi säätää sorttaamalla find:in ulostulon. Jos on varma että aakkosjärjestyksessä jälkimmäisessä tiedostossa on haluttu tiedosto, piiputtaa 'sort -r':llä. Jos menee hankalammaksi eli halutaan viimeksi luotu tiedosto, pitää piiputtaa ll:n, sort:in ja awk:in läpi.
~/xDocs/test> find lähde -type f -print
lähde/1/a.txt
lähde/2/b.txt
lähde/3/b.txt
lähde/3/c.txt
~/xDocs/test> cp $(find lähde -type f -print) kohde
cp: will not overwrite just-created `kohde/b.txt' with `lähde/3/b.txt'
~/xDocs/test> cp $(find lähde -type f -print | sort -r) kohde
cp: will not overwrite just-created `kohde/b.txt' with `lähde/2/b.txt'
~/xDocs/test>