Cu comanda:
ls -la *
Pot lista toate linkurile mele simbolice.
Cum pot elimina toate linkurile simbolice care sunt legate de un folder special?
De exemplu:
În directorul meu usr/local/bin
Am următoarele intrări:
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
Acum vreau să elimin toate legăturile cu calea /usr/local/texlive/
Comentarii
- Adică eliminați toate linkurile simbolice legate de un folder țintă? Sau mutați toate linkurile simbolice găsite într-un anumit folder?
- @uther: mă refer la eliminarea linkurilor.
Răspuns
Vă rugăm să vă asigurați că citiți răspunsul alternativ . Este chiar mai precis, deși nu a fost votat la fel de mare în acest moment.
Puteți utiliza acest lucru pentru a șterge toate linkurile simbolice:
find -type l -delete
cu versiuni moderne find
.
În versiunile mai vechi de identificare, trebuie să fie:
find -type l -exec rm {} \; # or find -type l -exec unlink {} \;
Pentru a limita la un anumit link țintă, presupunând că niciuna dintre căi nu conține niciun caracter de linie nouă:
find -type l | while IFS= read -r lnkname; do if [ "$(readlink "$lnkname")" == "/your/exact/path" ]; then rm -- "$lnkname"; fi; done
sau frumos formatat
find -type l | while IFS= read -r lnkname; do if [ "$(readlink "$lnkname")" = "/your/exact/path" ]; then rm -- "$lnkname" fi done
if
poate include, desigur, și o condiție mai complexă, cum ar fi potrivirea unui model cu grep
.
Adaptat cazului dvs.:
find -type l | while IFS= read -r lnk; do if (readlink "$lnk" | grep -q "^/usr/local/texlive/"); then rm "$lnk"; fi; done
sau frumos formatat:
find -type l | while IFS= read -r lnk do if readlink "$lnk" | grep -q "^/usr/local/texlive/" then rm "$lnk" fi done
Comentarii
- Această comandă elimină toate linkurile simbolice? Vă rugăm să consultați ediția mea de mai sus ..
- @ Marco: da, primele trei rânduri ar fi. Editarea mai mult 🙂
- Aș adăuga și un
-print
la sfârșitul
comandă pentru a obține feedback vizual.
Răspuns
Cu un find
modern care acceptă -lname
:
find /usr/local/bin -lname "/usr/local/texlive/*" -delete
ar trebui să facă it.
Comentarii
- Aceasta este o soluție excelentă și simplă. Am testat și funcționează ca un farmec. Mulțumim
- Probabil că ar trebui să fie
find /usr/local/bin
- Nici măcar modern, neapărat. GNU
find
are-lname
de mai mult timp decât l-am întreținut (din jurul anului 2003). - @JamesYoungman: Mulțumiri! Prin
find
modern am vrut să spun GNUfind
. 😉 Am folositusr/local/bin
, deoarece ' este ceea ce a folosit OP.
Răspuns
Soluția find
este excelentă.
Doar în cazul în care găsirea dvs. nu „t suport -lname
, aici este un alt mod care folosește numai shell și readlink
.
cd /usr/local/bin for f in *; do case "$(readlink "$f")" in /usr/local/texlive/*) rm "$f" ;; esac done
Răspuns
Cu zsh
:
rm -f /usr/local/bin(@e"{[[ $REPLY:P = /usr/local/texlive/* ]]}")
$REPLY:P
rezolvă complet calea către una fără linkuri simbolice, deci presupunând că /usr/local/texlive
este link-ul simbolic în sine , ar elimina toate fișierele care, după rezoluția link-ului simbolic, se află sub /usr/local/textlive
, care ar include linkuri către /usr/local/texlive/foo
, dar și către ../texlive/bar
sau către /usr/./local/texlive/whatever
sau către /some/other/symlink
care este el însuși un link simbolic care indică în /usr/local/texlive
, etc.
Răspuns
Mergeți la calea dvs. și setați-vă configurația căii
ls -alh|grep "your-pattern-to-file-or-folder-for-symlink"| awk "{print $9}"|xargs rm -rf
Comentarii
- Deoarece acestea sunt căi precum
usr/local/bin
pe care le cautăgrep
,grep -E
este calea de urmat. În caz contrar, nu ar exista rezultate potrivite. De asemenea,h
dinls
nu servește la niciun scop aici!-h, --human-readable : with -l, print sizes in human readable format (e.g., 1K 234M 2G)
. Pentru mai multe consultațiman ls
sauman grep
Răspuns
sudo unlink /path/of/your/package
thats it
Comentarii
- Cum elimină acest lucru toate legăturile simbolice care indică țintele aflate sub calea dată? Rețineți că întrebarea se întreabă despre eliminarea legăturilor simbolice dintr-un anumit director care indică țintele dintr-un alt director.