Kuinka voin poistaa kaikki symboliset linkit erityiskohteeseen?

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 GNU find. 😉 Käytin usr/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, joita grep etsii, grep -E on tie. Muuten vastaavia tuloksia ei olisi. Myös h kohdassa ls 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 kohdasta man ls tai man 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.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *