Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: mka 28 Dubna 2009, 10:39:18
-
Mimochodem,
kdo přijde na nejjednodušší způsob vypsání všech odkazů, které odkazují do určité složky resp. jejích podsložek?
Například všechny odkazy, které odkazují kamkoliv do /media/disk?
-
Mě napadlo třeba tohle
find /home/prema -type l -exec ls -ld {} \; | grep '\-> /media/disk'
lrwxrwxrwx 1 prema prema 11 28. dub 10.49 /home/prema/links/link1 -> /media/disk
lrwxrwxrwx 1 prema prema 11 28. dub 10.49 /home/prema/links/link2 -> /media/disk
lrwxrwxrwx 1 prema prema 11 28. dub 10.49 /home/prema/links/link3 -> /media/disk
lrwxrwxrwx 1 prema prema 11 28. dub 10.49 /home/prema/link4 -> /media/disk
lrwxrwxrwx 1 prema prema 11 28. dub 10.49 /home/prema/Plocha/link5 -> /media/disk
Nebo tohle je rychlejší, ale není tam celá cesta k souboru
ls -lR | grep '\-> /media/disk'
lrwxrwxrwx 1 prema prema 11 28. dub 10.49 link4 -> /media/disk
lrwxrwxrwx 1 prema prema 11 28. dub 10.49 link1 -> /media/disk
lrwxrwxrwx 1 prema prema 11 28. dub 10.49 link2 -> /media/disk
lrwxrwxrwx 1 prema prema 11 28. dub 10.49 link3 -> /media/disk
lrwxrwxrwx 1 prema prema 11 28. dub 10.49 link5 -> /media/disk
-
No vida, díky, vyzkouuším...
Celé cesty snad ani nepotřebuju; jde mi o to, že až budu likvidovat 8.04 na sda3, na kterou mám nalinkované různé adresáře od /var/www přes profily thunderbirda a firefoxe až po ... nevím co ještě, tak abych si nějakým jednoduchým způsobem vypsal všechno, co na tom disku používám i v 9.04 (tedy vede tam nějaký odkaz z disku s 9.04) a případně s tím pak něco udělal (přesunul, ...)
-
kdyz tohle vyresit nejak obecne neni zas tak jednoduchy... ;)
- ten link nemusi pouzivat absolutni cestu, ale relativni (mozno jakz takz resit prikazem readlink)
- ten link muze ukazovat na jinej link a ten zas na jinek link atd... nektere z tech linku "po ceste" treba mohou byt
v tom adresari, kterej te zajima, ale nakonec zas muzou ukazovat jinam. otazkou je, jestli te takovy linky (respektive ten na zacatku) zajimaji ci nikoliv
- link muze ukazovat do pozadovane destinace na neexistujici soubor treba i v neexistujicim adresari (jeste lepe pomoci relativni adresy)
...
uz me to prestalo bavit vymyslet ;D
ale az si to precte ntz, tak se jiste dockame poradneho reseni, on se s nejakym rychlokvasenym prikazem jiste nespokoji. ;D
-
......
ale az si to precte ntz, tak se jiste dockame poradneho reseni, on se s nejakym rychlokvasenym prikazem jiste nespokoji. ;D
No podle mě zase napíše OMG!! a pastne sem něco lepšího ;D
-
- ten link nemusi pouzivat absolutni cestu, ale relativni (mozno jakz takz resit prikazem readlink)
- ten link muze ukazovat na jinej link a ten zas na jinek link atd...
No, mě bohatě stačí ty linky, které v sobě nesou absolutní odkaz, začínající na /media/disk. Nemám jich v tuhle chvíli zas tak moc, ale za chvíli jistě zapomenu, kam jsem co dal. Znáte to, ne? Takže až budu z disku s 8.10 dělat pouze datový disk a v souvislosti s tím současná data přesouvat někam jinam, tak si musím zároveň podle toho zaktualizovat všechny odkazy, které mi na ta data vedou. A případné zřetězené linky se tím přece změní samy (když změním jeden odkaz, změním tím samozřejmě i všechny odkazy, které ho nějakým způsobem používají, to dá rozum).
-
Tak pořád čekám na toho ntz...
Nebo snad chcete říct, že v linuxu není pro hledání odkazů žádná obdoba obyčejného "obsahuje text"?
-
## u hardlinku je to jednoduche, akorat se vyhledaji stejne inody, u symlinku me
## nenapada nic jineho nez "brute-force" metoda nize, ktera vyhleda vsechny symlinky
## v /usr odkazujici do /lib
find /usr/ -type l -exec ls -l {} \; | perl -ne 's@^.[^/]*@@; next if not /-> \/lib/; print'
ps. jak rikal karlik, tak problem muze bejt se relativni cestama, ale pri trose snahy by to slo vyresit taky
-
nic jineho nez brute-force metoda u symlinku neni mozna .. nicmene v perlu to osetri File::Spec->canonpath() .. viz `man File::Spec`
-
Jo, dík, vypadá to slibně.