Potrzebuję znaleźć wszystkie dowiązane pliki w danym systemie plików. Np. Uzyskaj listę plików, każda linia zawiera połączone pary lub trojaczki itp.
Rozumiem mniej więcej, jak to zrobić, trzeba stworzyć słownik z kluczem i-węzła dla wszystkich plików / katalogów w systemie plików, z wyłączeniem „.” i „..” linki, a następnie indodes o więcej niż jednej nazwie to hardlinks… Ale mam nadzieję, że może istnieje gotowe rozwiązanie lub ktoś już napisał taki skrypt.
find / -type f -links +1 -printf '%i %n %p\n'
sort
(+uniq
)? Byłem ciekawy, więc spróbowałem na moim głównym komputerze (16 GB i5-2500k z ssd). z 2187757 plikami (find / -xdev -type f | wc
) zajmuje 12 rzeczywistych sekund po zwróceniu 3820 plików / 570 i-węzłów (time sudo find / -xdev -type f -links +1 -printf "%i\n" | sort | uniq | wc
). musisz uwzględnić%n %p
pliki rzeczywiste, ponieważ wyjąłem je do zliczania i-węzłów.daje listę wszystkich plików, które mają więcej niż jedno łącze, tzn. pliki, do których istnieje łącze twarde. Pętla nad tym jest wtedy stosunkowo łatwa - trudne rozwiązanie, jeśli nie masz tak wielu plików
Ale mam nadzieję, że są lepsze rozwiązania, na przykład pozwalając pierwszej
find
wybieranie numerów print-węzła, a następnie przy użyciufind
„s-inum
opcję, aby wyświetlić wszystkie pliki związane z tym węzła.źródło
find . -type f -printf '%i %p\n'
, pozwoliłby zbudować znacznie szybsze rozwiązanie.for
pętli odpowiednie dostosowanie IFS działałoby. Aby przeanalizować dane wyjściowe polecenia find w moim komentarzu, powinno również działać zadeklarowanie wszystkiego między pierwszą spacją a końcem wiersza jako nazwą pliku.lost+found
itp.); co jest szczególnie ważne, jeśli dane wyjściowe powinny być przetwarzane dalej, jak w drugim wierszu.IMHO najlepszym sposobem jest użycie następującego wiersza (na pewno musisz zastąpić to,
/PATH/FOR/SEARCH/
co chcesz wyszukać):skanuje system plików tylko raz, pokazuje i-węzeł, liczbę dowiązań twardych i ścieżkę plików z więcej niż jednym dowiązaniem twardym i sortuje je według i-węzła.
jeśli denerwują Cię komunikaty o błędach dotyczące folderów, których nie możesz czytać, możesz rozwinąć linię do tego:
źródło