Pracuję na systemie HP-UX i chcę sprawdzić, czy są jakieś okrągłe łącza symboliczne.
Do tej pory używam polecenia:
ls -lrt `find ./ -follow -type l`
Ale w wyniku tego działa tylko ls -lrt w bieżącym katalogu.
Jakiego polecenia należy użyć, aby znaleźć wszystkie okrągłe dowiązania symboliczne w systemie?
unix
find
symbolic-link
hp-ux
Vladimir
źródło
źródło
find
polecenie albo po prostu drukuje,.
albo nie drukuje niczego (więc właśnie uruchamiaszls -lrt
lubls -lrt .
). Nie wiem wystarczająco dużo o HP-UX,find
aby powiedzieć ci, jak to naprawić (może to wymaga jawnego-print
? ). 2) Co masz na myśli mówiąc „okrągły”?./a -> ./b
i./b -> ./a
? Co/home/foo/a -> /home
? Czy/home/foo/a -> /home/bar
i/home/bar/b -> /home/foo
?-follow
naprawdę nie podaje mi prawdziwych linków to wyniki?-follow
,find
bada sam odnośnik, a nie plik to wskazuje. Tak więcfind . -type l
drukuje rzeczy, które są linkami (ponieważ są-type l
), nawet nie patrząc na to, na co wskazują (którymi są pliki lub katalogi lub inne linki prowadzące do plików lub katalogów).Odpowiedzi:
Strona podręcznika GNU find mówi, że wszystkie znaleziska POSIX mają wykrywać pętle systemu plików i emitować komunikaty o błędach w tych przypadkach, a ja przetestowałem
na GNU find, który był w stanie znaleźć pętle formularza
./a -> ./b
i./b -> ./a
wydrukować błąd(to też działało
a->b->c->a
)Podobnie, pętle formularza
./foo/x -> ..
i./foo/a -> ./bar
+./bar/b -> ./foo
wydrukowały błędyJeśli chcesz zrobić coś z wyjściem innym niż odczyt, musisz przekierować go ze stderr na stdout i potokować go do jakiegoś skryptu, który może przeanalizować komunikaty o błędach.
źródło
-follow
tak.ls
zamiast korzystać z rzeczywistych linków zamiast uzyskiwania rzeczywistych linków-follow
?ls
polecenie, korzystając z danych wyjściowychfind
polecenia. Twojefind
polecenie nic nie wydrukowało, więc twoja powłoka została wykonanals
bez niczego, co zawiera bieżący katalog.