Jak znaleźć i wyświetlić listę wszystkich dowiązań symbolicznych utworzonych dla określonego pliku?

52

Stworzyłem wiele dowiązań symbolicznych na różnych ścieżkach dla konkretnego pliku lub katalogu. Chcę całą listę utworzonych ścieżek dowiązań symbolicznych (lokalizacji).

Przykład:

Stworzyłem dowiązania symboliczne do ~/Pictureskatalogu w wielu katalogach. Jak wyświetlić wszystkie dowiązania symboliczne do tego ~/Pictureskatalogu?

Czy to jest możliwe? Jeśli tak, to jak?

Avinash Raj
źródło
Musisz szukać wyczerpująco, nie ma zapisanej liczby, jak w przypadku twardych linków. Zobacz jedną z odpowiedzi za pomocą funkcji znajdź.
ctrl-alt-delor

Odpowiedzi:

42

Oto przykład:

find -L /dir/to/start -xtype l -samefile ~/Pictures

lub może lepiej:

find -L /dir/to/start -xtype l -samefile ~/Pictures 2>/dev/null

pozbyć się niektórych błędów, takich jak Permission denied, Too many levels of symbolic linkslub File system loop detectedktóre findje wyrzucają, gdy nie mają odpowiednich uprawnień lub innych sytuacji.

  • -L - Śledź linki symboliczne.

  • -xtype l - Plik jest dowiązaniem symbolicznym

  • -samefile name- Plik odnosi się do tego samego i-węzła, co name. Gdy -Ljest włączony, może to obejmować dowiązania symboliczne.

Uwagi:

  • Użyj małej litery L -xtype l, a nie cyfry 1.
  • Na macOS / Darwin -xtypejest -type.
Radu Rădeanu
źródło
Czy można zmodyfikować polecenie, aby znaleźć dowiązanie symboliczne zawierające ścieżkę? np. pliki w całym systemie, które mogą zawierać łącza do ~ / Pictures / A, ~ / Pictures / A / B / C, lub dowolne pliki w podkatalogach ~ / Pictures>
śniegiem
7

Bardzo prosta, użyj opcji -lname:

find / -lname /path/to/original/dir

Od man find:

-lname pattern
       File is a symbolic link whose contents match shell pattern pattern.  The
       metacharacters do not treat `/' or `.' specially.  If the -L option or the
       -follow option is in effect, this test returns false unless the symbolic link
       is broken.

Uwaga : pamiętaj, że dowiązania symboliczne mogą znajdować się w dowolnym miejscu, w tym w systemie zdalnym (jeśli udostępniasz pliki), więc możesz nie być w stanie zlokalizować ich wszystkich.

Abdennour TOUMI
źródło
Zauważ też, że jeśli dowiązanie symboliczne jest ścieżką względną, ../dirto znaczy nie znajdzie absolutu /path/to/original/dir, możesz zamiast tego użyć wzorca i wyeliminować fałszywe alarmy-lname \*dir
Jason S
2

Spróbuj tego :

ls -i ~/

277566 Pictures

find . -follow -inum 277566(znajdź katalogi o tym samym numerze i- węzła )

Wyświetli wszystkie ścieżki dowiązań symbolicznych.

nux
źródło
4
Znajdziesz tu twarde linki, a nie dowiązania symboliczne. Twarde linki mają wspólne numery i-węzłów. dowiązania symboliczne mają różne numery i-węzłów. i-węzeł dowiązania symbolicznego ma ścieżkę zamiast listy bloków.
Hildred
w pytaniu nie wspomniano o twardym lub miękkim dowiązaniu symbolicznym
nux