Kirjoittaja Aihe: cp -r lähde kohde, lähde = puu, kohde ei ?  (Luettu 2831 kertaa)

igor_2

  • Käyttäjä
  • Viestejä: 768
    • Profiili
cp -r lähde kohde, lähde = puu, kohde ei ?
« : 24.05.07 - klo:23.24 »
Miten voin kopioida tiedostot hakemistopuusta yhteen hakemistoon?

Olen käyttänyt komentoa

Koodia: [Valitse]
cp -r /home/jaetut/kuvat ./

ja sillä toki saa kuvat-hakemiston alihakemistoineen työhakemistoon, mutta haluaisin että kuvat tulevat "puusta" yhteen ja samaan hakemistoon (eli ./:ään).

Tuntuu, että cp:stä ei tämmöstä "rekursiota purkavaa" vipua löydy, taikka sitten olen vain sokea...

_Pete_

  • Käyttäjä
  • Viestejä: 1845
  • Fufufuuffuuu
    • Profiili
Vs: cp -r lähde kohde, lähde = puu, kohde ei ?
« Vastaus #1 : 24.05.07 - klo:23.36 »
Miten voin kopioida tiedostot hakemistopuusta yhteen hakemistoon?

Olen käyttänyt komentoa

Koodia: [Valitse]
cp -r /home/jaetut/kuvat ./

ja sillä toki saa kuvat-hakemiston alihakemistoineen työhakemistoon, mutta haluaisin että kuvat tulevat "puusta" yhteen ja samaan hakemistoon (eli ./:ään).

Tuntuu, että cp:stä ei tämmöstä "rekursiota purkavaa" vipua löydy, taikka sitten olen vain sokea...

Koodia: [Valitse]
for i in `find /etc/ -type f`; do echo $i; cp $i "/tmp/test/`basename $i`"; done

Tuo kopio rekursiivisesti kaikki tiedostot /etc/ -> /tmp/test/

Siitä varmaankin osaat soveltaa omaan tarktoukseen?

Ehkäpä joku tehokkaampi tapa on olemassa, muut kertokoon sen :)


janne

  • Käyttäjä
  • Viestejä: 5150
    • Profiili
Vs: cp -r lähde kohde, lähde = puu, kohde ei ?
« Vastaus #2 : 24.05.07 - klo:23.51 »
Ehkäpä joku tehokkaampi tapa on olemassa, muut kertokoon sen :)

ei tämä varmaan sen tehokkaampi ole, mutta äkkiseltään tuntuisi, että tuon pystyisi hoitamaan 'yhdelläkin' komennolla:
Koodia: [Valitse]
find /etc/ -type f -exec cp '{}' /tmp/test/ \;
voipi mennä pieleenkin, nyt ei ajatus oikein kulje.
Janne

igor_2

  • Käyttäjä
  • Viestejä: 768
    • Profiili
Vs: cp -r lähde kohde, lähde = puu, kohde ei ?
« Vastaus #3 : 25.05.07 - klo:06.59 »
Ei mennyt pieleen Jannen ajatukset. Toimii.

Kiitos molemmille!

teetee

  • Käyttäjä
  • Viestejä: 130
    • Profiili
Vs: cp -r lähde kohde, lähde = puu, kohde ei ?
« Vastaus #4 : 02.08.07 - klo:17.12 »
Mitenkäs jos haluan kopioida pelkät jpg-kuvat jostain hakemistosta säilyttäen niiden omat hakemistorakenteet ja ei kopioiden nef-kuvia?

Eli hakemistorakenne on seuraavanlainen:

kuvathakemisto (dvd)
|
|-hakemisto1
|  L jpgkuvat
|  nefkuviahakemisto1ssä
|
|-hakemisto2
|  L jpgkuvat
|  nefkuviahakemisto2ssa

Tuolta kopioitaisiin jpgeet, niin että tulos olisi:

jokuhakemisto
|
|-hakemisto1
|  L jpgkuvat
|
|-hakemisto2
|  L jpgkuvat

Toivottavasti ymmärsitte.

Muokattu hakemistorakennetta, jonka muistin hieman väärin.
« Viimeksi muokattu: 02.08.07 - klo:17.19 kirjoittanut teetee »

SuperOscar

  • Käyttäjä
  • Viestejä: 4060
  • Ocatarinetabellatsumtsum!
    • Profiili
    • Legisign.org
Vs: cp -r lähde kohde, lähde = puu, kohde ei ?
« Vastaus #5 : 02.08.07 - klo:17.58 »
ei tämä varmaan sen tehokkaampi ole, mutta äkkiseltään tuntuisi, että tuon pystyisi hoitamaan 'yhdelläkin' komennolla:
Koodia: [Valitse]
find /etc/ -type f -exec cp '{}' /tmp/test/ \;

Tuosta findin -exec’istä kun niin varoitellaan, sama xargsia käyttäen mennee näin:

Koodia: [Valitse]
find /etc -type f | xargs -I '{}' echo cp '{}' /tmp/test
Mitenkäs jos haluan kopioida pelkät jpg-kuvat jostain hakemistosta säilyttäen niiden omat hakemistorakenteet ja ei kopioiden nef-kuvia?

Huh... Curiouser and curiouser... Pääsin aika lähelle tämmöisellä häkkyrällä:

Koodia: [Valitse]
find alkup_hakemisto -name \*.jpg | xargs -I '{}' cp --parents '{}' uusi_hakemisto
Tuo kopioi kyllä vain *.jpg-tiedostot ja säilyttää hakemistorakenteen, mutta (a) edellyttää, että uusi_hakemisto on valmiiksi olemassa, (b) kopioi hakemistorakenteen kokonaisuudessaan uusi_hakemisto-hakemiston alle. Siis:

uusi_hakemisto
  + alkup_hakemisto
       + alkup_hakemiston alla oleva rakenne

Joku muu saa jatkaa tästä :)
« Viimeksi muokattu: 02.08.07 - klo:17.59 kirjoittanut SuperOscar »
pöytäkone 1, NUC: openSUSE Leap 15.6, kannettavat 1–3: Debian GNU/Linux 12; pöytäkone 2: openSUSE Tumbleweed; RPi 1: FreeBSD 14-RELEASE; RPi 2: LibreELEC 11