Komennolla:
ls -la *
Voin luetella kaikki symboliset linkkini.
Kuinka voin poistaa kaikki erityiseen kansioon linkitetyt symboliset linkit?
Esimerkiksi:
Omassa hakemistossa usr/local/bin
Minulla on seuraavat merkinnät:
lrwxrwxrwx 1 root root 50 Apr 22 14:52 allneeded -> /usr/local/texlive/2011/bin/x86_64-linux/allneeded lrwxrwxrwx 1 root root 47 Apr 22 14:52 amstex -> /usr/local/texlive/2011/bin/x86_64-linux/amstex lrwxrwxrwx 1 root root 24 Apr 23 19:09 arara -> /home/marco/.arara/arara
Haluan nyt poistaa kaikki linkit polulla /usr/local/texlive/
Kommentit
- Tarkoitatko kaikkien kohdekansioon linkitettyjen symlinkkien poistamista? Tai siirrä kaikki löydetyt symlinkit tiettyyn kansioon?
- @uther: Tarkoitan linkkien poistamista.
Vastaa
Varmista, että luet vaihtoehtoisen vastauksen . Se on vielä enemmän pisteeseen, vaikka sitä ei äänestetty tässä vaiheessa yhtä korkeaksi.
Voit poistaa tämän kaikkien symbolisten linkkien avulla:
find -type l -delete
moderneilla find
-versioilla.
Vanhemmissa hakuversioissa sen on oltava:
find -type l -exec rm {} \; # or find -type l -exec unlink {} \;
Rajoitetaan tiettyyn linkkikohteeseen olettaen, että mikään polkuista ei sisällä uutta rivimerkkiä:
find -type l | while IFS= read -r lnkname; do if [ "$(readlink "$lnkname")" == "/your/exact/path" ]; then rm -- "$lnkname"; fi; done
tai hienosti muotoiltu
find -type l | while IFS= read -r lnkname; do if [ "$(readlink "$lnkname")" = "/your/exact/path" ]; then rm -- "$lnkname" fi done
if
voisi tietysti sisältää myös monimutkaisemman ehdon, kuten mallin sovittamisen grep
.
Räätälöity tapauksellesi:
find -type l | while IFS= read -r lnk; do if (readlink "$lnk" | grep -q "^/usr/local/texlive/"); then rm "$lnk"; fi; done
tai hienosti muotoiltu:
find -type l | while IFS= read -r lnk do if readlink "$lnk" | grep -q "^/usr/local/texlive/" then rm "$lnk" fi done
Kommentit
- Poistetaanko tämä komento kaikki symlinkit? Katso edellinen muokkaus ..
- @ Marco: kyllä, kolme ensimmäistä riviä tekisivät. Muokkaamalla lisää 🙂
- Lisään myös
-print
-komento visuaalisen palautteen saamiseksi.
Vastaa
Kanssa moderni find
, joka tukee -lname
:
find /usr/local/bin -lname "/usr/local/texlive/*" -delete
pitäisi tehdä se.
Kommentit
- Se on hieno ja yksinkertainen ratkaisu. Testasin ja se toimii kuin viehätys. Kiitos
- Oletettavasti sen pitäisi olla
find /usr/local/bin
- Ei edes moderni, välttämättä. GNU
find
on ollut-lname
pidempään kuin minä olen ylläpitänyt sitä (noin vuodesta 2003 lähtien). - @JamesYoungman: Kiitos! Nykyaikaisella
find
tarkoitin todella GNUfind
. 😉 Käytinusr/local/bin
, koska se ' s mitä OP käytti.
Vastaa
find
-ratkaisu on loistava.
Siinä tapauksessa, että löytösi ei t tuki -lname
, tässä on toinen tapa, joka käyttää vain kuorta ja readlink
.
cd /usr/local/bin for f in *; do case "$(readlink "$f")" in /usr/local/texlive/*) rm "$f" ;; esac done
Vastaa
Kanssa zsh
:
rm -f /usr/local/bin(@e"{[[ $REPLY:P = /usr/local/texlive/* ]]}")
$REPLY:P
ratkaisee polun täysin ilman linkkiä, joten olettaen, että /usr/local/texlive
ei ole itse linkkiä. , se poistaisi kaikki tiedostot, jotka symlink-tarkkuuden jälkeen elävät /usr/local/textlive
-kohdassa, joka sisältäisi linkit /usr/local/texlive/foo
-kohtaan mutta myös ../texlive/bar
tai /usr/./local/texlive/whatever
tai /some/other/symlink
, joka on itse symboli, joka osoittaa kohtaan /usr/local/texlive
jne.
Vastaa
Siirry polulle ja aseta itsellesi polun kokoonpano
ls -alh|grep "your-pattern-to-file-or-folder-for-symlink"| awk "{print $9}"|xargs rm -rf
Kommentit
- Koska nämä ovat polkuja, kuten
usr/local/bin
, joitagrep
etsii,grep -E
on tie. Muuten vastaavia tuloksia ei olisi. Myösh
kohdassals
ei ole ' mitään tarkoitusta tässä!-h, --human-readable : with -l, print sizes in human readable format (e.g., 1K 234M 2G)
. Katso lisätietoja kohdastaman ls
taiman grep
vastaus
sudo unlink /path/of/your/package
thats it
Kommentit
- Kuinka tämä poistaa kaikki symboliset linkit, jotka osoittavat tietyn polun alapuolella oleviin kohteisiin? Huomaa, että kysymys koskee symbolisten linkkien poistamista tietystä hakemistosta, joka viittaa kohteisiin jossakin toisessa hakemistossa.