Ubuntu Suomen keskustelualueet

Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: KalleR - 11.09.16 - klo:23.01

Otsikko: Miten kopioida rsyncilla vain viimeisen vuorokauden aikana muuttuneet tiedostot?
Kirjoitti: KalleR - 11.09.16 - klo:23.01
Olen yrittänyt pähkiä ongelmaa mutten taida tajuta rsyncin valitsimia oikein että saisin tehtyä otsikkossa mainitun kopioinnin.
Otsikko: Vs: Miten kopioida rsyncilla vain viimeisen vuorokauden aikana muuttuneet tiedostot?
Kirjoitti: petteriIII - 12.09.16 - klo:01.36
rsync -avt $(find mistä_kansiosta -name nimen_rajoitteet -type f -mtime -montako_vuorokautta_taaksepäin) mihin_kansioon

- minulla esimerkiksi: rsync -avt $(find ~/OMATSKRIPTIT -name "*" -type f -mtime -10) ~/Elisa
- mutta helposti näihin pikaisesti tehtyihin "skripteihin" tulee virheitä joita ei heti tajuakaan joten kokeile ensin jossain harmittomassa
- ja yksinkertaisempi skripti löytyy varmasti aina.

Lisätty 21.9.2016:
Näin siinä käy kun yrittää väsyneenä. Ilmeisesti välilyönnit hyväksyvä on:
Koodia: [Valitse]
rsync -rlptvzs $(find mistä_kansiosta_lähtien -name nimen_tarkenne  -type f -mtime -montako_päivää_taaksepäin) mihin_kansioon
esimerkiksi:
Koodia: [Valitse]
rsync -rlptvzs $(find ~/OMATSKRIPTIT -name "*" -type f -mtime -500) ~/Elisa

- laitoin sen tänne  väliaikaiseen talteen koska osaan ilmeisesti hävittää mitähyvänsä - tuntuu toimivan; täytyy tarkistella. Sivuvaikutuksiakin on: mikäli kopioitavassa tiedostopuussa on useampia joilla on eri polku mutta sama tiedostonimi niin vain yksi kopioituu. Kyllä tällä silti käyttöä on: nopeuttaahan tämä varsinkin isojen muuttumattomien tiedostojen kopiomisessa tai kun ei tiedä missä kansiossa kopioitava on.
- varsinkin find:illä on vielä miljoona parametria joten räätälöinti onnistuu melkein millaiseen tehtävään tahansa - jopa regex saadaan mukaan.
- ja nopeutta löytyy paljon - eiköhän Perl ja Pythonkin ole vaikeuksissa.
Otsikko: Vs: Miten kopioida rsyncilla vain viimeisen vuorokauden aikana muuttuneet tiedostot?
Kirjoitti: KalleR - 13.09.16 - klo:03.19
rsync -avt $(find mistä_kansiosta -name nimen_rajoitteet -type f -mtime -montako_vuorokautta_taaksepäin) mihin_kansioon

Ongelmana tämän skriptin kanssa on tiedostonimet joissa on välilyönti
Otsikko: Vs: Miten kopioida rsyncilla vain viimeisen vuorokauden aikana muuttuneet tiedostot?
Kirjoitti: jekku - 13.09.16 - klo:05.01
....
Ongelmana tämän skriptin kanssa on tiedostonimet joissa on välilyönti

Moiset tiedostonimet kuplivat hankaluuksia muuallekin, joten eiköhän nuo kannata korjata ensin...
Otsikko: Vs: Miten kopioida rsyncilla vain viimeisen vuorokauden aikana muuttuneet tiedostot?
Kirjoitti: ajaaskel - 13.09.16 - klo:21.40
http://forum.ubuntu-fi.org/index.php?topic=47969.0
Otsikko: Vs: Miten kopioida rsyncilla vain viimeisen vuorokauden aikana muuttuneet tiedostot?
Kirjoitti: petteriIII - 22.09.16 - klo:00.03
Alkuperäisestä viestistä oli tipahtanut edestä pois IFS=$'\n' . Jotta nimissä sallittaisiin välilyönnit. Perään olisi hyvä liittää: unset IFS
Siis käsky olisi pitänyt olla:
Koodia: [Valitse]
IFS=$'\n'; rsync -rlptvzs $(find ~/OMATSKRIPTIT -name "*" -type f -mtime -500) ~/Elisa; unset IFS

- ja nopeus on tosiaan vertaansa vailla - varsinkin jos kopiointi tehdään varmuuden vuoksi: kun halutaan olla varmoja siitä että kaikki on viimeistä versiota.
- nopeus on niin suuri koska vaikka koodi on BASH:ia niin koodin suoritus tapahtuu enimmäkseen C:ssä. BASH:issa toimiminen on hidastuu hirvittävästi suoritettavan rivimäärän kasvaessa - ja loopatessa erittäinkin. Luulisinpa että Perl ja Pythonkin ovat helisemässä näiden yksirivisten kanssa - eivätkä olekaan enää ylivertaisia.
- ja soveltamalla find:in miljoonaa optiota ja kytkintä voidaan räätälöidä toiminta melkein miksi halutaan. Tai rsynkata SSH:n yli.
- mutta tehtävän suorittaminen kuvatulla tavalla saattaa johtaa väärään tulokseen riippumatta siitä käytetäänkö kopiointiin rsync:ia, mv:tä, cp:tä tai jotakin muuta: mikäli tiedostopoluilla on samannimisiä tiedostoja kopioituu niistä vain yksi. Onhan se helppolukuista, ja mikäli kaikki halutaan saada lopputulokseen on rsync:in kytkimien pikku r muutettava isoksi R:ksi mutta se johtaa vaikeasti luettavaan lopputulokseen.

Kopioinnin rajoittimia:
Koodia: [Valitse]
Kopioinnin estäminen mikäli polulla on jokin merkkiryhmä:
IFS=$'\n'; rsync -rlptvzs $(find ~/OMATSKRIPTIT ! -path "*ARKISTO*" -type f -mtime -500) ~/Elisa; unset IFS

Kopioinnin estäminen mikäli kopioitavan nimi päättyy numeroon:
IFS=$'\n'; rsync -rlptvzs $(find ~/OMATSKRIPTIT ! -iregex ".*[0-9]$"   -type f -mtime -500) ~/Elisa; unset IFS