Sida 1 av 1

Kommando för att laga trasig länkar?

Postat: 06 jun 2008, 00:23
av Johnny Rosenberg
Finns det? När man organiserar om finns det risk att en och annan länk stryker på foten. Själv kom jag på den briljanta idén att skapa en ny mapp i min hemmapp där jag lägger alla egna mappar och filer. Denna mapp heter ~/Eget. Detta för att jag tröttnade på att mappar skapas automatiskt i ~/ utan att programmet som skapar dem frågar mig om det först. Så nu har jag en Eget-mapp där BARA mina egna grejer finns, MEN denna förändring innebar samtidigt en mängd trasiga länkar.

Vad jag mest är ute efter är ett kommando som fungerar ungefär så här, i mitt specifika fall, och jag använder nu ett påhittat namn på kommandot:

LagaTrasigaLänkar /home/guraknugen/ /home/guraknugen/Eget/

Detta kommando skulle då börja söka länkar i /home/guraknugen/ och automatiskt byta ut /home/guraknugen/ mot /home/guraknugen/Eget/ i länkens mål.

Re: Kommando för att laga trasig länkar?

Postat: 06 jun 2008, 01:28
av Konservburk
Jag känner inte till något LagaTrasigaLänkar-kommando. Men man kan använda find för att hitta trasiga länkar:

Kod: Markera allt

find -L . -type l
Eftersom det antagligen inte finns speciellt många trasiga länkar så skulle jag nog stanna där och ändra det som hittas för hand. Men vill du nödvändigtvis automatisera det hela så är det inte speciellt svårt att skripta ihop något. Skicka det find hittar till en loop, kolla vart varje trasig länk pekar med readlink, och om det är mot "$1" (/home/guraknugen/), ändra isåfall pekningen till "$2" (/home/guraknugen/Eget/) med ln -sf.

Kod: Markera allt

#!/bin/bash

find -L . -type l -print0 |
while read -d '' link
do readlink "$link" | sed -n "s,$1,$2,p" | xargs -i ln -sf "{}" "$link"
done
Jag vill dock lyfta ett varningens finger för att det hela kan gå ordentligt åt pipsvängen om du inte anger "$1" och "$2" med yttersta omsorg. Överväg den säkra manuella metoden om den inte innebär olidligt mycket jobb.

Re: Kommando för att laga trasig länkar?

Postat: 08 jun 2008, 09:09
av Johnny Rosenberg
Konservburk skrev:Jag känner inte till något LagaTrasigaLänkar-kommando. Men man kan använda find för att hitta trasiga länkar:

Kod: Markera allt

find -L . -type l
Eftersom det antagligen inte finns speciellt många trasiga länkar så skulle jag nog stanna där och ändra det som hittas för hand.
Jag gjorde en sökning och antalet länkar fyllde i alla fall mer än en skärmsida, så lite jobbigt blir det allt att fixa dem manuellt. Ofta passar ju vissa filer att ha på flera ställen och det brukar jag lösa med länkar. Exempelvis kanske en mapp med lite Calc-filer för min bilekonomi passar både i /home/guraknugen/Eget/Bil och i /home/guraknugen/Eget/Kontor/Ekonomi. De kanske till och med ska ha olika namn, vilket dock redan är fixat. Jag vill bara byta ut texten ”/home/guraknugen” i länkens mål mot ”/home/guraknugen/Eget”.
Konservburk skrev:Men vill du nödvändigtvis automatisera det hela så är det inte speciellt svårt att skripta ihop något. Skicka det find hittar till en loop, kolla vart varje trasig länk pekar med readlink, och om det är mot "$1" (/home/guraknugen/), ändra isåfall pekningen till "$2" (/home/guraknugen/Eget/) med ln -sf.
Fast kommer detta att fungera även med länkar som ligger i undermappar till nämnda mapp? Kommer den exempelvis att byta ut länkmålet /home/guraknugen/Undermapp1/Undermapp2 mot /home/guraknugen/Eget/Undermapp1/Undermapp2?
Konservburk skrev:

Kod: Markera allt

#!/bin/bash

find -L . -type l -print0 |
while read -d '' link
do readlink "$link" | sed -n "s,$1,$2,p" | xargs -i ln -sf "{}" "$link"
done
Jag vill dock lyfta ett varningens finger för att det hela kan gå ordentligt åt pipsvängen om du inte anger "$1" och "$2" med yttersta omsorg. Överväg den säkra manuella metoden om den inte innebär olidligt mycket jobb.

Re: Kommando för att laga trasig länkar?

Postat: 08 jun 2008, 11:07
av Konservburk
Johnny Rosenberg skrev:Fast kommer detta att fungera även med länkar som ligger i undermappar till nämnda mapp? Kommer den exempelvis att byta ut länkmålet /home/guraknugen/Undermapp1/Undermapp2 mot /home/guraknugen/Eget/Undermapp1/Undermapp2?
Det är vad jag tänkte mig iaf. Du kan enkelt se exakt vad skriptet kommer att göra genom att lägga till ett echo mellan xargs -i och ln -sf.

Re: Kommando för att laga trasig länkar?

Postat: 04 jul 2008, 08:20
av axel112
Konservburk skrev:Jag känner inte till något LagaTrasigaLänkar-kommando. Men man kan använda find för att hitta trasiga länkar:

Kod: Markera allt

find -L . -type l
Eftersom det antagligen inte finns speciellt många trasiga länkar så skulle jag nog stanna där och ändra det som hittas för hand. Men vill du nödvändigtvis automatisera det hela så är det inte speciellt svårt att skripta ihop något. Skicka det find hittar till en loop, kolla vart varje trasig länk pekar med readlink, och om det är mot "$1" (/home/guraknugen/), ändra isåfall pekningen till "$2" (/home/guraknugen/Eget/) med ln -sf.

Kod: Markera allt

#!/bin/bash

find -L . -type l -print0 |
while read -d '' link
do readlink "$link" | sed -n "s,$1,$2,p" | xargs -i ln -sf "{}" "$link"
done
Jag vill dock lyfta ett varningens finger för att det hela kan gå ordentligt åt pipsvängen om du inte anger "$1" och "$2" med yttersta omsorg. Överväg den säkra manuella metoden om den inte innebär olidligt mycket jobb.
Jag måste lära mig sådana häringa trix. Imponerande och fiffigt! ;D

Re: Kommando för att laga trasig länkar?

Postat: 31 aug 2008, 16:03
av Johnny Rosenberg
Konservburk skrev:Jag känner inte till något LagaTrasigaLänkar-kommando. Men man kan använda find för att hitta trasiga länkar:

Kod: Markera allt

find -L . -type l
Har äntligen tagit mig tid att studera och testa detta (samt utfört jobbet med att laga de trasiga länkarna i vissa fall och i andra fall bara byta ut dem mot nya) och måste säga att det är en rätt kul lösning, om jag förstod man find rätt: Sök filer och följ länkar. På så vis hittas bara rena filer och mappar, inga länkar i normalfallet. Med instruktionen att bara visar länkar kan man ju därför tro att inget kommer att visas, men om en länk är trasig så visas den, då det inte finns någon fil eller mapp att visa, därför kommer enbart trasiga länkar att visas… Fiffigt. ;D

Hoppas jag lär mig tänka själv någon gång också, så att jag kan komma på sådant här utan att fråga… Men man lär sig mer och mer för varje gång, så sakta men säkert…