Dairesel sembolik bağlantıları nasıl bulurum?


12

Bir HP-UX sistemi üzerinde çalışıyorum ve herhangi bir dairesel sembolik bağlantı olup olmadığını bulmak istiyorum.

Şimdiye kadar şu komutu kullanıyorum:

ls -lrt  `find ./ -follow -type l`

Ama sadece sonuç olarak geçerli dizinde ls -lrt yapıyor.

Bir sistemdeki tüm dairesel sembolik bağlantıları bulmak için hangi komutu kullanmalıyım?


1) Geçerli dizini alıyorsunuz, çünkü findkomut ya yalnızca bir .şey yazdırıyor ya da yazdırmıyor (bu yüzden sadece çalışıyorsunuz ls -lrtya da ls -lrt .) HP-UX hakkında findbunu nasıl düzelteceğinizi söyleyecek kadar bilginiz yok (belki de açık olması gerekir -printmi? ). 2) Ne demek "dairesel"? ./a -> ./bve ./b -> ./a? Ne olmuş /home/foo/a -> /home? Ya /home/foo/a -> /home/barve /home/bar/b -> /home/foo?
DerfK

Dairesel olarak, yukarıdakilerin hepsinde bir döngü oluşturabilen her türlü bağlantı anlamına geliyordum. Şu anda -print ile deniyorum.
Vladimir

Ayrıca, neden dahil -followaslında bana bazı gerçek bağlantılar sonuç vermiyor?
Vladimir

Olmadan -follow, findişaret ettiği dosyayı değil, bağlantının kendisini inceler. Bu nedenle find . -type l, -type lneye işaret ettiklerini (dosya veya dizinler veya dosyalara veya dizinlere işaret eden diğer bağlantılar) görmeye bile bakmadan bağlantı olan şeyleri yazdırır (çünkü bunlar ).
DerfK

Yanıtlar:


18

GNU find'ın sayfası tüm POSIX bulgularının dosya sistemi döngülerini algılaması ve bu durumlarda hata mesajları yayınlaması gerektiğini söylüyor ve test ettim

find . -follow -printf ""

GNU formunun döngüler bulmak mümkün bulmak ilgilidir ./a -> ./bve ./b -> ./ahata baskı

find: `./a': Too many levels of symbolic links
find: `./b': Too many levels of symbolic links

(bu da işe yaradı a->b->c->a)

Aynı şekilde, formun döngüleri ./foo/x -> ..ve ./foo/a -> ./bar+ ./bar/b -> ./foohataları yazdırdı

find: File system loop detected; `./foo/a/b' is part of the same file system loop as `./foo'.
find: File system loop detected; `./bar/b/a' is part of the same file system loop as `./bar'.
find: File system loop detected; `./foo/x' is part of the same file system loop as `.'.

Çıktı ile okumak dışında bir şey yapmak isterseniz, stderr'den stdout'a yönlendirmeniz ve hata mesajlarını ayrıştırabilecek bir komut dosyasına yönlendirmeniz gerekir.


Bu, döngüler varsa bir hata mesajının görüneceği anlamına mı geliyor?
Vladimir

GNU ile bul ve -followevet.
DerfK

Tamam, ama bu lskullanmadığınızda gerçek bağlantıları almak yerine sadece bir açıklamayı nasıl açıklar -follow?
Vladimir

1
Kabuk böyle çalışır. lsKomutunuzun çıktısını kullanarak komutu çalıştırmasını istediniz find. Sizin findKabuk idam böylece komut, bir şey yazdırmak vermedi lsgeçerli dizin listeler şey ile.
DerfK

DerfK çözümü ayrıca Windows 7'de bir cygwin kabuğundan çağırarak döngüleri bulur.
Don Gateley
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.