Kommando för att laga trasig länkar?

Här diskuterar vi skal, kommandon och klassiska linuxverktyg.
Användarvisningsbild
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?

Inlägg 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.
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

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

Inlägg 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.
Användarvisningsbild
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?

Inlägg 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.
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

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

Inlägg 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.
Användarvisningsbild
axel112
Inlägg: 1810
Blev medlem: 04 jan 2007, 00:13
OS: Ubuntu
Ort: Eslöv

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

Inlägg 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
Användarvisningsbild
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?

Inlägg 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…
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Skriv svar

Återgå till "Terminalforum"