Kommando för att laga trasig länkar?
- Johnny Rosenberg
- Inlägg: 1256
- Blev medlem: 23 jun 2007, 16:18
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Kontakt:
Kommando för att laga trasig länkar?
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.
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.
- Konservburk
- Inlägg: 5919
- Blev medlem: 07 apr 2007, 22:28
Re: Kommando för att laga trasig länkar?
Jag känner inte till något LagaTrasigaLänkar-kommando. Men man kan använda find för att hitta trasiga länkar:
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.
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.
Kod: Markera allt
find -L . -type l
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
- Johnny Rosenberg
- Inlägg: 1256
- Blev medlem: 23 jun 2007, 16:18
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Kontakt:
Re: Kommando för att laga trasig länkar?
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:Jag känner inte till något LagaTrasigaLänkar-kommando. Men man kan använda find för att hitta trasiga länkar:
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.Kod: Markera allt
find -L . -type l
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: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.
Konservburk skrev: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.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
- Konservburk
- Inlägg: 5919
- Blev medlem: 07 apr 2007, 22:28
Re: Kommando för att laga trasig länkar?
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.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?
Re: Kommando för att laga trasig länkar?
Jag måste lära mig sådana häringa trix. Imponerande och fiffigt!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:
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
find -L . -type l
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.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

- Johnny Rosenberg
- Inlägg: 1256
- Blev medlem: 23 jun 2007, 16:18
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Kontakt:
Re: Kommando för att laga trasig länkar?
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.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

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…