Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: oprava chybnych symlinků  (Přečteno 1689 krát)

Uran

  • Aktivní člen
  • *
  • Příspěvků: 341
oprava chybnych symlinků
« kdy: 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
"Pouze text v MS Wordu je opravdu čistý, příteli."

Yontalcar

  • Stálý člen
  • **
  • Příspěvků: 833
  • Semper fidelis
Re: oprava chybnych symlinků
« Odpověď #1 kdy: 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
NB: ASUS X53U - AMD Brazos E450; Debian GNU/Linux Sid amd64 (KDE 4.14)
Jen dvě věci jsou nekonečné - vesmír a lidská hloupost. Tím prvním si ovšem nejsem tak jist. - Albert Einstein

Uran

  • Aktivní člen
  • *
  • Příspěvků: 341
Re: oprava chybnych symlinků
« Odpověď #2 kdy: 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

"Pouze text v MS Wordu je opravdu čistý, příteli."

 

Provoz zaštiťuje spolek OpenAlt.