Jeśli mam określony plik w systemie plików UNIX, czy istnieje sposób, aby użyć bash do znalezienia wszystkich łączy do tego pliku, zarówno symbolicznych, jak i trudnych? Jeśli potrzebuję różnych poleceń dla każdego, jakie one są?
Jeśli mam określony plik w systemie plików UNIX, czy istnieje sposób, aby użyć bash do znalezienia wszystkich łączy do tego pliku, zarówno symbolicznych, jak i trudnych? Jeśli potrzebuję różnych poleceń dla każdego, jakie one są?
Odpowiedzi:
Wypróbuj to z GNU find
:
find /start/dir -L -samefile /file/to/check -exec ls -li {} \;
Przykładowe dane wyjściowe:
1234704 -rw-r--r-- 2 user1 user1 1134 2009-09-11 11:12 ./x1
1234704 -rw-r--r-- 2 user1 user1 1134 2009-09-11 11:12 ./x2
1234983 lrwxrwxrwx 1 user1 user1 2 2009-10-31 16:56 ./testx -> x1
2345059 lrwxrwxrwx 1 user2 user2 2 2010-01-03 16:17 ./x3 -> x1
Możesz użyć -ls
zamiast, -exec
ale pokaże i-węzeł i inne informacje pliku docelowego zamiast poszczególnych plików.
-L
i -samefile
powoduje, że oba są na liście. W przypadku pominięcia -L
łącza symboliczne nie są przestrzegane (patrz man find
).
Jeśli nie masz GNU Find, możesz to zrobić:
find / -inum "$(ls -i /file/to/check | cut -d ' ' -f 1)"
Ale to nie będzie działać dla dowiązań symbolicznych.