Ben kuvvetle öneririm değil kullanmak find -L görev için (açıklama için aşağıya bakınız). İşte bunu yapmanın başka yolları:
"Saf find" bir yöntem kullanmak istiyorsanız , bunun yerine şöyle görünmelidir:
find . -xtype l
( xtypedereferenced bir bağlantı üzerinde yapılan bir testtir) Bu, tüm sürümlerinde bulunmayabilir find. Ancak başka seçenekler de var:
Ayrıca komutun test -eiçinden de yürütebilirsiniz find:
find . -type l ! -exec test -e {} \; -print
Bazı grepnumaralar bile , (dosya isimleri de dahil olmak üzere tüm çıktı satırlarında sürtünen) soruda belirtilenden daha iyi (yani daha güvenli ) olabilir;find -L
find . -type l -exec sh -c 'file -b "$1" | grep -q ^broken' sh {} \; -print
find -LAlıntılanan hüner solo ile gelen commandlinefu güzel ve hacky görünüyor, ama bir çok sahip tehlikeli hatadır : Tüm sembolik bağ izlenir. Aşağıda sunulan içerikleri içeren dizini göz önünde bulundurun:
$ ls -l
total 0
lrwxrwxrwx 1 michal users 6 May 15 08:12 link_1 -> nonexistent1
lrwxrwxrwx 1 michal users 6 May 15 08:13 link_2 -> nonexistent2
lrwxrwxrwx 1 michal users 6 May 15 08:13 link_3 -> nonexistent3
lrwxrwxrwx 1 michal users 6 May 15 08:13 link_4 -> nonexistent4
lrwxrwxrwx 1 michal users 11 May 15 08:20 link_out -> /usr/share/
Bu find -L . -type ldizinde koşarsanız, hepsi /usr/share/de aranır (ve bu gerçekten uzun sürebilir) 1 . "Giden bağlantılara bağışıklık" olan bir findkomut için kullanmayın-L .
1 Bu ufak bir rahatsızlık gibi görünebilir (bu komut, "sadece" tümünden geçmek için uzun zaman alacaktır /usr/share) - ancak daha ciddi sonuçlar doğurabilir. Örneğin, chroot ortamlarını düşünün: Ana dosya sisteminin bazı alt dizinlerinde var olabilir ve mutlak konumlara sembolik bağlantılar içerebilir. Bu bağlantılar “dış” sistem için kopmuş gibi görünebilir, çünkü chroot'a girdikten sonra sadece uygun yerlere işaret ederler. Ayrıca, bazı bootloader'ların /boot, başlangıç bölümü olarak monte edildiğinde, sadece başlangıçtaki bir başlangıç aşamasında anlamlı olan sembolik bağlantılar kullandığını hatırlıyorum /.
Bu yüzden, find -Lzararsız görünen bir dizinden bozuk linkleri bulmak ve silmek için bir komut kullanırsanız , sisteminizi bile bozabilirsiniz ...
-type lgereksizdir, çünkü bağlantı dışı-xtype lolarak çalışacak-type l. Yanifind -xtype lmuhtemelen tüm ihtiyaç vardır. Bu yaklaşım için teşekkürler.