A következő paranccsal:
ls -la *
Az összes szimbolikus linkemet felsorolhatom.
Hogyan távolíthatom el az összes szimbolikus linket, amelyek egy speciális mappához vannak kapcsolva?
Például:
A könyvtáramban usr/local/bin
A következő bejegyzések vannak:
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
Most el akarok távolítani minden hivatkozást a /usr/local/texlive/
Megjegyzések
- Arra gondolsz, hogy eltávolítasz egy célmappához kapcsolt összes hivatkozást? Vagy helyezze át az összes megtalált szimpla linket egy adott mappába?
- @uther: A hivatkozások eltávolítását értem.
Válasz
Kérjük, olvassa el az alternatív választ . Még ennél is lényegesebb, bár ezen a ponton nem szavazták olyan magasra.
Ezzel törölheti az összes szimbolikus linket:
find -type l -delete
modern find
verziókkal.
Régebbi keresési verzióknál ennek lehet:
find -type l -exec rm {} \; # or find -type l -exec unlink {} \;
Egy adott linkcélra korlátozva, feltéve, hogy egyik útvonal sem tartalmaz új sor karaktert:
find -type l | while IFS= read -r lnkname; do if [ "$(readlink "$lnkname")" == "/your/exact/path" ]; then rm -- "$lnkname"; fi; done
vagy szépen formázott
find -type l | while IFS= read -r lnkname; do if [ "$(readlink "$lnkname")" = "/your/exact/path" ]; then rm -- "$lnkname" fi done
A if
természetesen tartalmazhat egy összetettebb feltételt is, például egy minta illesztését a grep
.
Az Ön esetére szabva:
find -type l | while IFS= read -r lnk; do if (readlink "$lnk" | grep -q "^/usr/local/texlive/"); then rm "$lnk"; fi; done
vagy szépen formázva:
find -type l | while IFS= read -r lnk do if readlink "$lnk" | grep -q "^/usr/local/texlive/" then rm "$lnk" fi done
Megjegyzések
- Ez a parancs eltávolítja az összes szimpla linket? Kérjük, olvassa el a fenti szerkesztésemet.
- @ Marco: igen, az első három sor megtenné. További szerkesztés 🙂
- A i id végén egy
-print
-t is felvennék v id = “0fdc8cc887″>
parancs vizuális visszajelzéshez.
Válasz
egy modern find
, amely támogatja a -lname
-t:
find /usr/local/bin -lname "/usr/local/texlive/*" -delete
kell tennie azt.
Megjegyzések
- Ez egy nagyszerű és egyszerű megoldás. Teszteltem, és varázslatként működik. Köszönet
- Ennek feltehetően
find /usr/local/bin
- még korszerűnek sem kell lennie, szükségszerűen. A GNU
find
hosszabb ideig rendelkezik-lname
-val, mint amennyit én fenntartottam (2003 körül). - @JamesYoungman: Köszönöm! A modern
find
alatt valóban a GNUfind
-re gondoltam. 😉usr/local/bin
-et használtam, mert ez az ' s, amit az OP használt.
Válasz
A find
megoldás nagyszerű.
Csak abban az esetben, ha a találata nem “t” támogat -lname
, itt van egy másik mód, amely csak a shell és readlink
funkciót használja.
cd /usr/local/bin for f in *; do case "$(readlink "$f")" in /usr/local/texlive/*) rm "$f" ;; esac done
Válasz
A következővel: zsh
:
rm -f /usr/local/bin(@e"{[[ $REPLY:P = /usr/local/texlive/* ]]}")
$REPLY:P
teljes mértékben feloldja a szinkronmentes útvonalat, tehát feltételezve, hogy a /usr/local/texlive
önmagában is szimblink mentes , eltávolít minden olyan fájlt, amely a symlink felbontása után /usr/local/textlive
alatt él, amely linkeket tartalmazna az /usr/local/texlive/foo
, de a vagy /usr/./local/texlive/whatever
vagy /some/other/symlink
címre, amely maga a /usr/local/texlive
stb.
Válasz
Lépjen a saját elérési útjára, és állítsa be az útvonal konfigurációját
ls -alh|grep "your-pattern-to-file-or-folder-for-symlink"| awk "{print $9}"|xargs rm -rf
Megjegyzések
- Mivel ezek olyan utak, mint
usr/local/bin
, amelyeketgrep
keres,grep -E
a járható út. Ellenkező esetben nem lennének egyező eredmények. Ah
als
-ban szintén nem szolgál ' itt semmilyen célra!-h, --human-readable : with -l, print sizes in human readable format (e.g., 1K 234M 2G)
. További információ:man ls
vagyman grep
Válasz
sudo unlink /path/of/your/package
ez
megjegyzések
- Hogyan távolítja el az összes szimbolikus linket, amely az adott út alatt található célpontokra mutat? Ne feledje, hogy a kérdés a szimbolikus linkek eltávolításáról szól egy adott könyvtárban, amely más könyvtárak célpontjaira mutat.