sziasztok!
banális dologgal szembesülve (nyilván valamiért nem látom a fától az erdőt) nem találok jó megoldást. van egy könyvtárstuktúrám amiben van egy olyan almappa is, ami csak egy symlink egy másik (az egész kupacon kívül levő) mappára.
azt szeretném, hogy ha másolom a kérdéses mappákat, akkor a symlink (és vele a tartalma) ne menjen. azt hittem, hogy a cp parancs jó lesz nekem a következőképpen paraméterezve:
cp -Pr forrás cél
ettől függetlenül a forráson belül levő symlink mappa tartalmastul ment vele. biztos triviális a megoldás, de valamiért nem jövök rá. tudtok segíteni? :)
kiegészítés, mivel voltak félreértések: a hatása a kívánt parancsnak az legyen, mint mondjuk a következőnek:
rsync -r --safe-links forrás cél
- 1592 megtekintés
Hozzászólások
Ja, elég triviális: nem ment vele semmi. A symlink alatt ui. nincs semmi, mivel - ahogy a neve is mutatja - az csak egy link, ami oda mutat, ami alatt viszont van valamilyen tartalom, na azt a tartalmat látod a másolt helyen, és nem annak a tartalomnak valamiféle másolatát.
Teendő: semmi.
- A hozzászóláshoz be kell jelentkezni
meglehet pontatlanul fogalmaztam meg mit szeretnék és ezért vezettelek félre. legyen az alábbi struktúra:
/krumpli/ uj regi /forrás/ alma korte /burgonya <- ez itt a symlink a /krumpli/-ra uj regi /cél/
a /burgonya/ mappa egy symlink a fentebbi /krumpli/ mappára. azt szeretném elérni, hogy a /cél/ mappában létrejöjjön a következő struktúra:
/cél/
alma
korte
/burgonya
magyarán ne másolódjon a tartalma. a "cp -Pr" parancs viszi a tartalmat is. ezt akarom elkerülni. így is ugyan azt mondod válasznak?
--
xterm
- A hozzászóláshoz be kell jelentkezni
Maximálisan.
find krumpli -ls
613906 4 drwxrwxr-x 2 lx lx 4096 Aug 19 18:50 krumpli
find forras -ls
613907 4 drwxrwxr-x 4 lx lx 4096 Aug 19 18:49 forras
1297452 0 lrwxrwxrwx 1 lx lx 10 Aug 19 18:49 forras/burgonya -> ../krumpli
613909 4 drwxrwxr-x 2 lx lx 4096 Aug 19 18:49 forras/korte
613908 4 drwxrwxr-x 2 lx lx 4096 Aug 19 18:49 forras/alma
cp -Pr forras cel
find cel -ls
613910 4 drwxrwxr-x 4 lx lx 4096 Aug 19 18:53 cel
1737940 0 lrwxrwxrwx 1 lx lx 10 Aug 19 18:53 cel/burgonya -> ../krumpli
613911 4 drwxrwxr-x 2 lx lx 4096 Aug 19 18:53 cel/korte
613912 4 drwxrwxr-x 2 lx lx 4096 Aug 19 18:53 cel/alma
Látszik, hogy a cel/burgonya semmi egyéb, mint symlink ugyanúgy, ahogy a forras/burgonya volt. És akkor is az, ha a krumpli tele van mindenféle kacattal.
- A hozzászóláshoz be kell jelentkezni
először is köszi, hogy próbálsz segíteni! másodszor, valami nem kerek nálam. ha a krumpli mappa tele van kacatokkal, akkor a cél mappámban levő "másolata" is tele lesz. pont azt akarom, hogy ott ne legyen semmi (akár olyan áron is, hogy maga a symlink nem is másolódik).
hogy tisztább legyen: van egy mappa, amiben sok mindent tartok, de az esetek egy részében minden file-t akarok másolni, egy más részében meg csak egy "csökkentett" részét. ezért csináltam a symlinket. viszont így valamiért "mindig ott figyel" az egész, nem tudom elkerülni... :( már azon vagyok, hogy a cp helyett valami scripttel másoljam (pl. listázok rekurzívan, és soronként nézem, hogy symlink-e és ha nem, akkor másolom... de ez baromi beteg megoldás...)
--
xterm
- A hozzászóláshoz be kell jelentkezni
esetleg -d opció?
- A hozzászóláshoz be kell jelentkezni
sajna nem megoldás :/ kezdem azt hinni, hogy valami koncepcionális hiba van abban, amit szeretnék (mármint amivel szeretném, mert amit szeretnék, az sajna kell, nem kikerülhető)
--
xterm
- A hozzászóláshoz be kell jelentkezni
Egyébként nem tudom pontosan mit akarsz (még mindig) :)
-dR opció kihagyja azokat a fájlokat, amire a symlink mutat, tehát csak a symlinket másolja.
- A hozzászóláshoz be kell jelentkezni
Fizikailag _nincs_ott_semmi_, mint ahogyan hup.hu sincs a gépemen, csak azért, mert a firefox bookmark.html-je tartalmazza a http://hup.hu url-t, amely url funkciójában tök ugyanaz, mint a symlink.
De ha annyira zavaró a link létezése, másolás után ki lehet fésülni:
find cel -type l -exec rm {} \;
- A hozzászóláshoz be kell jelentkezni
hm... azt hittem megfogalmazni könnyebb, de jelek szerint több, mint nehéz. akkor még részletesebben :D bocs!
van egy mappa, amiben gyüjtök állományokat. ezt néha részben, néha egészben másolom egy másik diszkre. amikor nem kell az egész, akkor csak a "magját" másolnám. ezért a mappába belinkeltem a kiegészítő tartalmat. úgy akartam másolni, hogy a a symlinkkel "odarakott" tartalom a másik diszken ne legyen. egy sima cp -Pr eredménye mégis az lett, hogy bizony ott lettek a linkelt tartalmak is. a hely és az idő kritikussága miatt nem akarok pl. 20k helyett 200 megát másolni, csak ha feltétlen kell. így se érthető? :)
emiatt nem tehetem meg, hogy utólag kozmetikázom a másolatot, hiszen akkor már átment a felesleges tartalom, sávszélt, időt, stb elzabálva.
--
xterm
- A hozzászóláshoz be kell jelentkezni
Szerintem marhára nem érted mi is a symlink.
A symlink olynan file amiben csak egy path van. Attól hogy átmásolja nem lesz 20k helyett 200 mega, hacsak nincs legalább 200 ezer symlinked (blokkmérettől függ). Attól hogy a symlink megjelenik az új helyen attól még a könyvtár amire a symlink mutat (../burgonya a példában) az nem másolódik át (hacsak nem használtad a -H kapcsolót).
- A hozzászóláshoz be kell jelentkezni
kezdtem én is azt hinni, amit mondasz, de akkor mi magyarázza meg azt, hogy a "cél" nem 20k, hanem 200 mega? sőt, megtoldom még valamivel. a cél olyan filerendszerre is átkerült, ami a symlink típust fel se fogja, akkor is ez a szitu. meglehet, hogy valamit nem értek, de az nem a symlink fogalma ;) (hiszen akkor már az elején nem is létezett volna a probléma, hiszen nem másolódott volna át annyi file, mint amennyi, hanem csak a töredéke). bár olyan egyszerű lenne, hogy "marhára nem érted" :)
--
xterm
- A hozzászóláshoz be kell jelentkezni
Biztos, hogy nincs valami kretén alias arra cp-re?
Istenuccse bárhogy próbálom (-P) nélkül is, annyira tisztán csak a symlink meg, ahogy kell. Kipróbáltam egy ramdiskben nyomott vfattel is, de ott meg a symlink át se megy.
Milyen fájlrendszer a cél?
- A hozzászóláshoz be kell jelentkezni
egy ideig én is azt hittem (mivel egy pxeboot-os gép "hozott anyagból dolgozva" emészt meg egy scriptben levő cp parancsot; tehát először simán azt hittem, hogy csak annyi a gond, hogy az a cp nem érti a P paramétert). aztán egy másik gépen (lévén ott legalább nem kellett végigvárnom a kísérletek miatt a teljes boot folyamatot minden szarságával együtt!), vagyis egy distro (ubuntu, mivel nem volt más kéznél) más-más gépein gyártottam egy teszt környezetet és ott duhajkodtam ezzel a feladattal. sajna még eredménytelenül (és közben még azt is megkaptam, hogy szimplán marhára nem értem mi az a symlink és higyjem el, hogy az átmásolt 100 megák ott sincsenek :D).
két aliasom van csak:
$ alias
alias ll='ls -l'
alias ls='ls --color=auto'
$which cp
/bin/cp
kezdem azt hinni, hogy a cp nem jó megoldás erre a feladatra. de most vagy gyártok egy scriptet, ami végigmazsolázza a filerendszert és a symlink mappákba nem is megy bele, vagy pedig más eszköz után nézek.
elképzelhető lenne, hogy mind az ubi, mind a pxeboottal behúzott image egyaránt "herélt" cp-t tartalmazna?? a manualban ott a paraméter és szarik rá?? bár lehet, de eddig ezzel kapcsolatban nem is nyomoztam, hiszen ha két független linux disztrib is azonos jelenséget produkált, honnan is sejtettem volna ezt...
ja, a kérdésre a válasz: a végleges, tehát amiért elkezdtem, az fat32.
--
xterm
- A hozzászóláshoz be kell jelentkezni
Bocs hogy leszóltalak, én játszottam vele a te kedvedért nálam simán működik. A cp is működött minden különösebb paraméter nélkül.
Nem lehet hogy nem symlink az hanem link? Akkor teljesen más a leányzó fekvése.
- A hozzászóláshoz be kell jelentkezni
nem, én hoztam létre a linket (ln -s). ha filerendszerek között másolgatva nem működne azt mondanám így jártam. viszont mivel "natív" környezetben se megy, ezért probléma (tehát egy tök független tesztkörnyezeteben).
--
xterm
- A hozzászóláshoz be kell jelentkezni
a symlinket hogy hoztad létre? "teljes útvonallal", vagy csak relatív útvonallal? mert ugyan beteg megoldás, de eszembe jutott még valami. ha relatív útvonallal hozom létre a filet, nem pedig /-tól, akkor ugye a másolás után a példa szerinti esetben a link elbaxódik. következésképpen "nem követhető". így "működik", maga a másolat létrehozása. egyetlen problémám (viszont ezt csak köv munkanapon tudom kipróbálni), hogy vajon a többi script megeszi-e így a végeredményt (valami azt súgja, hogy nem, ha már ennyit szoptam vele...).
--
xterm
- A hozzászóláshoz be kell jelentkezni
A symlinket teljes útvonallal hoztam létre, és nálam teljesen normálisan működött.
Tehát ha volt egy symlinkem ami egy 2 gigás könyvtárra mutatott és átmásoltam "cp -r"-el akkor az új könyvtárban is symlink lett. Nem másolta át a 2 gigát csak ha "cp -H" val kezdtem másolni.
- A hozzászóláshoz be kell jelentkezni
nekem viszont másolja a tartalmat is... nem is értem miért, mert a man szerint nem kéne.
--
xterm
- A hozzászóláshoz be kell jelentkezni
kiegészítés n+1 :)
fogd fel úgy, hogy van az eredeti példában levő symlink egy mappa, amibe bind-dal "fel van csatolva" egy másik mappa. innentől az lenne a dolgom, hogyha mindent másolni akarok, akkor sima cp -r, ha meg nem, akkor "unbindolom", majd _aztán_ sima cp -r. ez működne is, csak van egy kis gond. nem egyetlen process létezik a rendszerben, ami a mappát piszkálja, ergo vagy nem tudnám kirántani alóla a mappát, vagy pedig ha épp sikerülne, akkor halna meg pár process, mert nem találja ott amit keres.
(egy dolgot viszont lehet meg tudsz világítani: pontosan mi a különbség a -H és a -L között?)
--
xterm
- A hozzászóláshoz be kell jelentkezni
cp -Prl forras cel ?! Tehát + "-l" kapcsoló.
Ati
- A hozzászóláshoz be kell jelentkezni
sajna ez se jó (bár a man szerint eleve nem is lehetett volna)
--
xterm
- A hozzászóláshoz be kell jelentkezni
ha máshogy nem megy, csinálsz egy egyszerű bash scriptet, ami másolás előtt törli, majd másolás után visszaállitja a symlinket. ennyi.
- A hozzászóláshoz be kell jelentkezni
azért nem jó megoldás, mert ha egy másik script épp akkor dolgozna a symlinkben levőkkel, amikor törölve van, akkor az elhasal. eddig egy tippet kaptam még, ami bejöhet, csak nem akarózik, csak végső megoldásként. ez pedig az, hogy másik filerendszerre mutasson a symlink és akkor a cp parancs talán végrehajtja azt, hogy "maradjon egy filerendszeren". nem próbáltam még, de abból kiindulva, hogy a -P paramétert se úgy hajtja végre, mint ahogy a man-ban van leírva... legalábbis kétséges a végkifejlet... brute force megoldásként tartogatom azt, hogy egy scripttel kopizgatom a mappákat egyetlen parancs helyett... de ez azért gusztustalan, mert ha javítani kell, vagy bővül, vagy akármi, akkor túl sok helyen kell módosítani... és fejben tartani, hogy hol kell még módosítani. :/
--
xterm
- A hozzászóláshoz be kell jelentkezni
Milyen op. rendszert használsz? Mert nekem megy. A man szerint is mennie kell! Milyen cp-t használsz?
- A hozzászóláshoz be kell jelentkezni
Biztos hogy Linuxon másolod? Mert némelyik unix/unix like alatt -P kapcsoló pont symlink másolásra kényszerít.
--
http://opensolaris.org/os/project/indiana/
http://www.opera.com/browser/
- A hozzászóláshoz be kell jelentkezni
a tesztben szereplő rendszerek eddig ubuntu, és busybox voltak. a hatás mindkettőn azonos volt. :/
--
xterm
- A hozzászóláshoz be kell jelentkezni
Nálam is tökéletesen működik. Sőt nálam még a -P sem kötelező, mert alapértelmezésben csak a linket másolja át.
A kimenetem:
xxxxx@xxxxx:~/proba$ ls -l ./*
./forrás:
összesen 36
-rw-r--r-- 1 xxxxx xxxxx 10245 2008-06-18 15:42 alma
lrwxrwxrwx 1 xxxxx xxxxx 26 2009-08-22 11:02 burgonya -> /home/xxxxx/proba/krumpli/
-rw-r--r-- 1 xxxxx xxxxx 22422 2008-06-18 15:38 korte
./krumpli:
összesen 352
-rw-r--r-- 1 xxxxx xxxxx 331268 2009-08-15 18:07 regi
-rw------- 1 xxxxx xxxxx 25441 2009-02-06 03:20 uj
xxxxx@xxxxx:~/proba$ du -h
40K ./forrás
356K ./krumpli
400K .
xxxxx@xxxxx:~/proba$ cp -Pr forrás /media/disk/linux/cél
xxxxx@xxxxx:~/proba$ du -h /media/disk/linux/cél
40K /media/disk/linux/cél/forrás
44K /media/disk/linux/cél
xxxxx@xxxxx:~/proba$ ls -l /media/disk/linux/cél/*
összesen 36
-rw-r--r-- 1 xxxxx xxxxx 10245 2009-08-22 11:19 alma
lrwxrwxrwx 1 xxxxx xxxxx 26 2009-08-22 11:19 burgonya -> /home/xxxxx/proba/krumpli/
-rw-r--r-- 1 xxxxx xxxxx 22422 2009-08-22 11:19 korte
xxxxx@xxxxx:~/proba$
A du -h kimenetéből látszik, hogy a burgonya szimbolikus link alatti fájlok nem másolódtak át. A link miatt viszont elérhetőek a krumpli könyvtárban lévő fájlok, bár fizikailag nem másolodtak át.
Melyik disztribució alatt probáltad? Mi a cp --version kimenete? Esetleg próbáld meg úgy, hogy az elérési utat is beírod: /bin/cp -Pr ........ A /bin/cp fájl nem egy link? Esetleg egy szkript?
Esetleg a fenti parancsokat (az útvonalak korrigálásával) lefuttathatnád, és a kimenetet bemásolhatnád.
- A hozzászóláshoz be kell jelentkezni
$cp --version
cp (GNU coreutils) 6.10
Copyright (C) 2008 Free Software Foundation, Inc.
A licenc GPLv3+: a GNU GPL 3. vagy újabb változata
Ez egy szabad szoftver, terjesztheti és/vagy módosíthatja.
NINCS GARANCIA, a törvény által engedélyezett mértékig.
$which cp
/bin/cp
$file cp
cp (GNU coreutils) 6.10
Copyright (C) 2008 Free Software Foundation, Inc.
A licenc GPLv3+: a GNU GPL 3. vagy újabb változata
Ez egy szabad szoftver, terjesztheti és/vagy módosíthatja.
NINCS GARANCIA, a törvény által engedélyezett mértékig.
a file-ok másolódnak sajna (bár lényegesen parasztosabb módon derült ki :) hiszen egy másik rendszer alá kerültek a file-ok és meglepve láttam, hogy mit keresnek ott (más os alá csak nem kéne működjön egy hálózaton "túl" levő symlink... :) (ki tudnád próbálni olyan filerendszeren, ami nem érti a linket? mert ugye nekem vfat a végcél, hiszen a link teljes útvonallal létrehozva szükség szerint "láttatná" a linkelt tartalmat. amit viszont én akarok az meg az, hogy a vfat-ra ne másolódjon át semmi, ami link mögött van. és mégis megtette. (rsync simán kikerüli a symlinket, ha kérem és nem is másolja át)
--
xterm
- A hozzászóláshoz be kell jelentkezni
Ha vfat-ra akarom másolni:
cp: "/media/1GByte/cél/forrás/burgonya" szimbolikus link nem hozható létre: A művelet nem engedett
A többit átmásolja, tehát pont úgy működik, ahogy szeretnéd:
xxxxx@xxxxx:/media/1GByte$ du -h cél
40K cél/forrás
44K cél
Én is Ubuntu (9.04) alatt próbáltam.
- A hozzászóláshoz be kell jelentkezni
hm... akkor baromira nem értem mi a kínja a dolognak... a végén az lesz, hogy csinálok egy scriptet, amivel kikerülöm ezt a problémát.
--
xterm
- A hozzászóláshoz be kell jelentkezni
Elolvasva a topicot: cp -a /forras /cel
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
kipróbáltam, de ez se megoldás.
--
xterm
- A hozzászóláshoz be kell jelentkezni
Nincs a cp-d aliasolva valamire alapbol ami miatt azt hisszuk hogy a /bin/cp fut, holott esetleg van egy plusz kapcsolo aliasban.... ? :-)
Az 'alias' mit ir ki ? :o)
- A hozzászóláshoz be kell jelentkezni
Es mar latom is hogy volt errol szo, bocsesz :-D
Viszont sokat segitene sztem ha leirnad egy mini peldan az OSSZES lepest amit csinalsz, a legelejetol addig hogy megnezed mi van a konyvtarban ami symlinkes. Valszeg vmi banalis dolog lesz, de igy csak tippelgetni lehet (bar nagyjabol mindent vegig tippeltek mar az elozoekben szolok).
Most mar kivancsi vagyok mi lesz a kimenet :-)
- A hozzászóláshoz be kell jelentkezni
Sajnos tényleg nem tudom mi a hiba
Nálam otthon (Gentoo alatt) műxik.
Munkahelyemen (Debian):
$ mkdir test1
$ mkdir test2
$ cd test1
$ ln -s /store/Nagy\ fajlokkal\ Teli\ Konyvtar/ TEST
$ ls
TEST
$ cd ../test2
$ cp ../test1/* ./
cp: omitting directory `../test1/TP'
$ cp -r ../test1/* ./
$ ls
TEST
$ cd ../test1/
$ ln -s /store/Masik\ nagy\ fileokkal\ teli\ konyvtar/ ./ize/
ln: target `./ize/' is not a directory: No such file or directory
$ ln -s /store/Masik\ nagy\ fileokkal\ teli\ konyvtar/ ./ize
$ ls
TEST ize
$ ln -s /store/Masik\ nagy\ fileokkal\ teli\ konyvtar ./ize2
$ ls
TEST ize ize2
$ cd ../test2/
$ ls
TEST
$ cp -r /ut\ a\ test1-hez/test1/* /ut\ a\ test2-hoz/test2/
$ ls
TEST ize ize2
$ cp --version
cp (GNU coreutils) 6.10
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Torbjorn Granlund, David MacKenzie, and Jim Meyering.
Tehát nálam működik.
Milyen fájlrendszer(eket) használsz? Hátha ott van valami implementációs bibi.
Megj: az "ln -s /ut/konyvtar/ ./nev"-hez bashcomp kell. (a helyes alak "ln -s /ut/konyvtar ./nev")
- A hozzászóláshoz be kell jelentkezni
Megj: az "ln -s /ut/konyvtar/ ./nev"-hez bashcomp kell. (a helyes alak "ln -s /ut/konyvtar ./nev")
????????????
NEM kell bashcomp. Mindket alak mukodokepes, de egyebkent is, a bashcomp-nak az egvilagon semmi hatasa nincs az ln parametereire. Nem tudom hol olvastad ezt az okorseget, de elfelejteni. Most.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
a végcél az, hogy egy script, ami file-okat másolgat "tehermentesíthető" legyen azzal, hogy a másolandók között van symlink tartalom is. a forrás ext3-ról dolgozik vfat-ra.
--
xterm
- A hozzászóláshoz be kell jelentkezni
nagyon szépen köszönöm a sok segítőkész embernek a próbálkozást. azt hiszem egy időre jegelem a dolog megfejtését és egy scriptet gyártok a probléma kikerülésére. azt hiszem a fentiekből talán látszik, hogy megpróbáltuk sokféleképpen és ennek ellenére nem sikerült megfejteni a hiba okát. átmenetileg feladtam (a végeredményt jelentősen hátráltatja már ez az "egysoros" probléma :) és így nem haladok semerre). mindenkinek kösz a közreműködést!
--
xterm
- A hozzászóláshoz be kell jelentkezni