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: Uran 01 Března 2011, 13:39:47

Název: oprava chybnych symlinků
Přispěvatel: Uran 01 Března 2011, 13:39:47
Menil jsem strukturu dat pod linuxem a potreboval bych zmenit i chybne symlinky.

Mam knihovnu e-book-u a z ni mam vytvoreny pomoci symlinku seznam toho co bych chtel precist. Behem presunu se mi vsak symlinky "znefunkcnily".

Napsal jsem jednoduchy skript, ktery to napravi, akrorat je to sileny bastl.

Neporadil by nekdo jak to napsat jednoduseji, efektivneji?

V podstate potrebuji u vsech symlinku zmenit retezec "/mnt\/data/books" za "/home/jakub/Knihy"

Kód: [Vybrat]
find . -type l | while read F; do ln -s "$(file "$F" | awk --field-separator='`' '{print $2}' | sed s/\'$// | sed 's#\/mnt\/data\/books#\/home\/jakub\/Knihy#')";done
Jako bonus bych jeste chtel zapracovat moznost, kdy symlinky nejsou v aktualnim adresari, ale v jeho podadresarich.

Sorry uz jsem to na foru resi, ale nedoresil.

Dekuji.

Uran
Název: Re: oprava chybnych symlinků
Přispěvatel: Yontalcar 01 Března 2011, 14:23:25
tak pro začátek:
Kód: [Vybrat]
find . -type l | while read F; do ln -s "$(readlink "$F" | sed 's#/mnt/data/books#/home/jakub/Knihy#')";done
Název: Re: oprava chybnych symlinků
Přispěvatel: Uran 02 Března 2011, 06:29:21
tak pro začátek:
Kód: [Vybrat]
find . -type l | while read F; do ln -s "$(readlink "$F" | sed 's#/mnt/data/books#/home/jakub/Knihy#')";done

Super dekuji readlink jsem neznal. Jinak bych jeste k ln pridal parametr -f aby to prepsalo puvodni soubory a nehazelo to chyby, ze soubor uz existuje.
Kód: [Vybrat]
find . -type l | while read F; do ln -s -f "$(readlink "$F" | sed 's#/mnt/data/books#/home/jakub/Knihy#')";done