Tüm sembolik bağları özel bir hedefle nasıl kaldırabilirim?


43

Komutu ile:

ls -la *

Tüm sembolik bağlarımı listeleyebilirim.

Özel bir klasöre bağlı tüm sembolik bağlantıları nasıl kaldırabilirim?

Örneğin:

Benim dizinde usr/local/binaşağıdaki girişleri var:

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

Şimdi yolu olan tüm bağlantıları kaldırmak istiyorum /usr/local/texlive/


1
Bir hedef klasöre bağlı tüm sembolik bağlantıları kaldırmayı mı kastediyorsunuz? Veya bulunan tüm sembolik bağlantıları belirli bir klasöre taşımak?
George M

@uther: Bağlantıları kaldırmayı kastediyorum.
Marco Daniel

Yanıtlar:


63

Lütfen alternatif cevabı okuduğunuzdan emin olun . Bu noktada çok yüksek oylar almamasına rağmen, konuya daha da fazlası geliyor.

Tüm sembolik bağlantıları silmek için bunu kullanabilirsiniz:

find -type l -delete

Modern findversiyonları ile.

Daha eski sürümlerde bu olması gerekebilir:

find -type l -exec rm {} \;
# or
find -type l -exec unlink {} \;

Belirli bir bağlantı hedefiyle sınırlandırmak için, yollardan hiçbirinin herhangi bir yeni satır karakteri içermediğini varsayarak

 find -type l | while IFS= read -r lnkname; do if [ "$(readlink '$lnkname')" == "/your/exact/path" ]; then rm -- "$lnkname"; fi; done

veya güzel biçimlendirilmiş

 find -type l |
 while IFS= read -r lnkname;
 do
   if [ "$(readlink '$lnkname')" = "/your/exact/path" ];
   then
     rm -- "$lnkname"
   fi
 done

ifTabii ki, aynı zamanda, bir desen eşleştirme gibi daha kompleks bir durum dahil olabilir grep.


Davanıza uyarlanmış:

find -type l | while IFS= read -r lnk; do if (readlink "$lnk" | grep -q '^/usr/local/texlive/'); then rm "$lnk"; fi; done

veya güzel biçimlendirilmiş:

find -type l | while IFS= read -r lnk
do
  if readlink "$lnk" | grep -q '^/usr/local/texlive/'
  then
    rm "$lnk"
  fi
done

Bu komut bütün sembolik işaretleri kaldırır mı? Lütfen yukarıdaki düzenlememe bakın ..
Marco Daniel

@Marco: evet, ilk üç satır olur. Daha fazla düzenleme :)
0xC0000022L

Ayrıca görsel geri bildirim almak -printiçin findkomutun sonuna bir tane eklerdim.
runlevel0

30

findDestekleyen bir modernle -lname:

find /usr/local/bin -lname '/usr/local/texlive/*' -delete

yapmalı.


1
Bu harika ve basit bir çözüm. Test ettim ve bir cazibe gibi çalışıyor. Teşekkürler
Marco Daniel

Muhtemelen bu olmalıfind /usr/local/bin
James Youngman

1
Modern bile değil, mutlaka. GNU findetti -lnameben (yaklaşık 2003 yılından beri) korumuştur daha uzun süre.
James Youngman

@JamesYoungman: Teşekkürler! Modern olarak findben gerçekten GNU'yu kastettim find. ;) Ben kullandım usr/local/bin, çünkü OP böyle kullandı.
Christoffer Hammarström

5

findÇözelti harika.

Bulmanın desteklememesi durumunda -lname, işte sadece kabuk ve kullanmanın başka bir yolu readlink.

cd /usr/local/bin
for f in *; do
  case "$(readlink "$f")" in /usr/local/texlive/*)
    rm "$f"
    ;;
  esac
done

1

İle zsh:

rm -f /usr/local/bin(@e'{[[ $REPLY:P = /usr/local/texlive/* ]]}')

$REPLY:PTam bu yüzden varsayarak bir sembolik içermeyen birine yolunu giderir /usr/local/texlive, bu sembolik link çözünürlüklü canlı altındakiler sonra tüm dosyaları kaldırmak olacağını kendini serbest sembolik bağdır /usr/local/textlivebağlantılar yer alacağını /usr/local/texlive/foodeğil, aynı zamanda etmek ../texlive/barveya /usr/./local/texlive/whateverveya /some/other/symlinkkendisinin işaret eden bir sembolik olan /usr/local/texlive, vs .


0

Yolunuza gidin ve kendinize yol yapılandırmasını ayarlayın

ls -alh|grep "your-pattern-to-file-or-folder-for-symlink"| awk '{print $9}'|xargs rm -rf

Bu gibi yollar olduğundan usr/local/binemin greparıyor, grep -Egitmek yoludur. Aksi takdirde eşleşen sonuç olmaz. Ayrıca hiçinde lsburada herhangi bir amaca hizmet etmez! -h, --human-readable : with -l, print sizes in human readable format (e.g., 1K 234M 2G). Daha fazla görmek için man lsveyaman grep
ss_iwe
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.