Kirjoittaja Aihe: Tiedostojen kopiointiin duplikaatit välttävä-ohjelma? [Ratkaistu]  (Luettu 3360 kertaa)

sniveri

  • Käyttäjä
  • Viestejä: 322
    • Profiili
Eli löytyykös jostain semmoista ohjelmaa jolla pystyisi esim. verkkolevyltä listaamaan kaikki tiedostot ja ottamaan kopion omalle kovolle jokaisesta uniikista tiedostosta? Eli kopiot jäisi pois.
« Viimeksi muokattu: 15.01.10 - klo:15.48 kirjoittanut sniveri »
Ubuntu 10.04 64-bit Desktop
Ubuntu 10.04 32-bit Desktop x 2
Ubuntu 10.04 32-bit Server

sniveri@diasp.eu

nm

  • Käyttäjä
  • Viestejä: 16430
    • Profiili
Vs: Tiedostojen kopiointiin duplikaatit välttävä-ohjelma?
« Vastaus #1 : 12.01.10 - klo:14.16 »
rsync saattaisi mahdollistaa tällaisen kopioinnin, mutta en osaa suoralta kädeltä antaa sopivia parametreja.

http://linux.fi/wiki/Rsync
http://linux.fi/wiki/Varmuuskopionti#Rsync

Toinen vaihtoehto olisi poistaa kaikki kopiot tai listata ne ja käsitellä erikseen. Katso: http://en.wikipedia.org/wiki/Fdupes
« Viimeksi muokattu: 12.01.10 - klo:14.24 kirjoittanut nm »

Ganymedes

  • Käyttäjä
  • Viestejä: 3915
    • Profiili
Vs: Tiedostojen kopiointiin duplikaatit välttävä-ohjelma?
« Vastaus #2 : 12.01.10 - klo:14.33 »
Riippuu ehkä siitä mikä on duplikaatin versus uniikki määritelmä?

Ehkä yksinkertaisimmillaan tarkoitetaan sitä, että tiedosto on duplikaatti jos sillä on "täsmälleen sama nimi" ja "sama last modified aikaleima" (mutta sijaitsee eri hakemistossa, samassa hakemistossahan näitä ei tämän määritelmän mukaan voisikaan olla) ja ehkä tähän pitää ottaa myös tutkittavaksi se, että sisältö on täsmälleen sama (en tosin tiedä miten tämä tutkitaan ohjelmissa, ehkä vain koon perusteella tai lisäksi jonkun leiman perusteella).

Luulisin, mutten ole tarkistanut, että rsync:istä löytyy ainakin vipu sille, jolla saadaan kohdehakemistoon kaikista tiedostoista "viimeisin (last modified aikaleiman mukaan) tiedosto" kaikista täsmälleen samannimisistä ... ja ainakin jos kohde on yksi ja sama hakemisto kaikille tiedostoille. En tiedä onko tämä hyväksyttävä ratkaisu vai ei - tämähän ei ole täsmälleen ylläesitetyn mukainen, mutta ehkäpä ei oikeasti halutakaan kaikkia uniikkeja tiedostoja vaan pelkästään viimeisimmät?

retu

  • Käyttäjä
  • Viestejä: 949
    • Profiili
Vs: Tiedostojen kopiointiin duplikaatit välttävä-ohjelma?
« Vastaus #3 : 12.01.10 - klo:15.03 »
Alkuperäisen viestin tavoite jää minusta kyllä vähän hämäräksi. Onko tärkeämpää löytää niitä duplikaattitiedostoja (ilmeisesti ei, mutta siihenkin on monia ohjelmia) vai kopioida kohdehakemistoon ne tiedostot joita siellä ei ennestään ole? Jälkimmäinen onnistuu vaikka komennolla:

Koodia: [Valitse]
cp -au serveri/ kohde/
Kopio kohde-hakemistoon tiedostot joiden päiväys on uudempi tai joita siellä ei ennestään ole.

Fiksumpi ja monipuolisempi keino on tuo jo ehdotettu rsync tai sitten unison, joka voi olla helpompi ottaa käyttöön.

Ganymedes

  • Käyttäjä
  • Viestejä: 3915
    • Profiili
Vs: Tiedostojen kopiointiin duplikaatit välttävä-ohjelma?
« Vastaus #4 : 12.01.10 - klo:15.32 »
Alkuperäisen viestin tavoite jää minusta kyllä vähän hämäräksi ...

Niinpä. Onhan tässä kaikenlaisia vaihtoehtoja ...

sniveri

  • Käyttäjä
  • Viestejä: 322
    • Profiili
Vs: Tiedostojen kopiointiin duplikaatit välttävä-ohjelma?
« Vastaus #5 : 12.01.10 - klo:15.55 »
Jeps, ideana oli se että vuosien varrella on samoja dokumentteja kopioitu aina uuteen kansioon samalla nimellä. Nyt sitten haluaisin että säästyisi tuo verkkoaseman sisältö koskemattomana mutta saisin omalle levylle päivämäärän mukaan viimeisimmän tiedoston haluttuun kansioon.

Eli jos on vaikka vuodelta 2004 tiedosto jorinhöpinät.txt jossain verkkolevyn kansiossa, ja vuodelta 2008 jorinhöpinät.txt toisessa niin jälkimmäinen kopioituisi haluamaani kansioon omalle levylle. Eli tiedoston sisällöllä ei ole tässä tapauksessa merkitystä vaan nimellä ja päivämäärällä.

EDIT: Ja vaikka kansiorakenne verkkolevyllä olisi minkälainen niin tiedostot pitäisi saada yhteen kansioon omalle levylle eli kansiorakennetta en halua kopioida.. Onkohan tämä jo mahdotonta?
« Viimeksi muokattu: 12.01.10 - klo:16.08 kirjoittanut sniveri »
Ubuntu 10.04 64-bit Desktop
Ubuntu 10.04 32-bit Desktop x 2
Ubuntu 10.04 32-bit Server

sniveri@diasp.eu

Ganymedes

  • Käyttäjä
  • Viestejä: 3915
    • Profiili
Vs: Tiedostojen kopiointiin duplikaatit välttävä-ohjelma?
« Vastaus #6 : 12.01.10 - klo:16.22 »
Oikeastaan tätä juuri ajoinkin takaa, että ehkä haluat tämän.

Luulisin, että rsync-ohjelman vivuilla juuri tämä onnistuu. Ei muuta kuin tutkimaan vipujen merkitystä - jollei joku sitä ole jo tehnyt valmiiksi.

Esimerkkejä (EI SITÄ mitä ajoit takaa):

rsync -urv /lahde_hakemisto/ /kohde_hakemisto/  (vivuilla tekee backupin, tuhoamatta jo aiemmin kopioituja - ei siis ole "mirror", mutta tämä ei ole se mitä haluat).

rsync -urv --delete-before (sama kuin edellä kun tuhoaa aiemmin kopioidut turhat, joita lähteessä ei enää ole)
« Viimeksi muokattu: 12.01.10 - klo:17.27 kirjoittanut Ganymedes »

retu

  • Käyttäjä
  • Viestejä: 949
    • Profiili
Vs: Tiedostojen kopiointiin duplikaatit välttävä-ohjelma?
« Vastaus #7 : 12.01.10 - klo:17.15 »
Jos haluat koota ne yhteen hakemistoon, voisi periaatteessa mennä näin:
Koodia: [Valitse]
find serveridoc/ -type f -print0 | xargs --null -n 2 sh -c 'cp -uv "$@" kootut/'
Vaiheittain purettuna loitsun tekemiset:

Koodia: [Valitse]
find serveridoc/ -type f -print0Listaa hakemistosta serveridoc kaikki "normaalit" tiedostot käyttäen erottimena nul-merkkiä.
Saatu lista tiedostonimistä käsitellään sitten xargs ohjelmalla, joka ajaa parametrina annetun jokaiselle tiedostolle. Sitä nul-merkkiä on syytä käyttää erottimena tai homma menee vituralleen tässä vaiheessa, jos yhdessäkin tiedostonimessä on välilyönti.

Koodia: [Valitse]
xargs --null -n 2 sh -c 'cp -uv "$@" kootut/'Ajaa siis komennon cp -uv jokaiselle syötteenä annetulle tiedostolle, käyttäen apushelliä (sh -c). Kopioinnin kohdehakemisto on siis kootut. Suosittelen että luot tyhjän hakemiston tätä varten. cp-komennon -u parametri kopioi vain jos tiedosto on uudempi tai sitä ei ole ennestään. -v parametri tulostaa kopioitavien tiedostojen nimet. Tähän liittyy myös xargs parametri -n 2, joka rajaa apushelliin välitettyjen parametrien määrää (selkeyttää).

Lisätietoja löytyy find, xargs ja cp komentojen man-sivuilta.
« Viimeksi muokattu: 12.01.10 - klo:17.31 kirjoittanut retu »

sniveri

  • Käyttäjä
  • Viestejä: 322
    • Profiili
Vs: Tiedostojen kopiointiin duplikaatit välttävä-ohjelma?
« Vastaus #8 : 12.01.10 - klo:17.33 »
Jos haluat koota ne yhteen hakemistoon, voisi periaatteessa mennä näin:
Koodia: [Valitse]
find serveridoc/ -type f -print0 | xargs --null -n 2 sh -c 'cp -uv "$@" kootut/'

Tämä toimii just niinkuin pitääkin, kiitoksia paljon!
Ubuntu 10.04 64-bit Desktop
Ubuntu 10.04 32-bit Desktop x 2
Ubuntu 10.04 32-bit Server

sniveri@diasp.eu