Witam wszystkich, muszę to zrobić w Linuksie:
- Biorąc pod uwagę: nazwa pliku „foo.txt”
- Znajdź: wszystkie pliki, które są dowiązaniami symbolicznymi do „foo.txt”
Jak to zrobić? Dzięki!
Witam wszystkich, muszę to zrobić w Linuksie:
Jak to zrobić? Dzięki!
Odpowiedzi:
To zależy, jeśli próbujesz znaleźć linki do określonego pliku, który jest wywoływany, foo.txt,
jest to jedyny dobry sposób:
find -L / -samefile path/to/foo.txt
Z drugiej strony, jeśli po prostu próbujesz znaleźć linki do dowolnego pliku, który ma nazwę foo.txt
, to coś w rodzaju
find / -lname foo.txt
lub
find . -lname \*foo.txt # ignore leading pathname components
-xtype l
aby znaleźć tylko listę linków symbolicznych
find . -lname '*foo.dir*'
(pasuje np. file.txt -> ../foo.dir/file.txt
)
Znajdź numer i-węzła pliku, a następnie wyszukaj wszystkie pliki o tym samym numerze i-węzła:
$ ls -i foo.txt
41525360 foo.txt
$ find . -follow -inum 41525360
Alternatywnie wypróbuj lname
opcję find
, ale to nie zadziała, jeśli masz względne linki symboliczne, npa -> ../foo.txt
$ find . -lname /path/to/foo.txt
-samefile
opcji z -L
dla tego samego efektu, bez konieczności samodzielnego wyszukiwania i-węzła
foo
jest to katalog, użyj ln -di
w jednej linii:find . -follow -inum $(ls -di foo.txt |cut -d" " -f1)
Wolę używać symlinks
narzędzia, które jest również przydatne podczas wyszukiwania uszkodzonych linków symbolicznych. Zainstaluj przez:
sudo apt install symlinks
Pokaż wszystkie linki symboliczne w bieżącym folderze i podfolderach:
symlinks -rv .
-r
: rekurencyjny-v
: verbose (pokaż wszystkie linki symboliczne, nie tylko uszkodzone)Aby znaleźć określone łącze symboliczne, wystarczy grep
:
symlinks -rv . | grep foo.txt