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
-
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"
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
-
tak pro začátek:
find . -type l | while read F; do ln -s "$(readlink "$F" | sed 's#/mnt/data/books#/home/jakub/Knihy#')";done
-
tak pro začátek:
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.
find . -type l | while read F; do ln -s -f "$(readlink "$F" | sed 's#/mnt/data/books#/home/jakub/Knihy#')";done