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 laby 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 lnameopcję find, ale to nie zadziała, jeśli masz względne linki symboliczne, npa -> ../foo.txt
$ find . -lname /path/to/foo.txt
-samefileopcji z -Ldla tego samego efektu, bez konieczności samodzielnego wyszukiwania i-węzła
foojest to katalog, użyj ln -diw jednej linii:find . -follow -inum $(ls -di foo.txt |cut -d" " -f1)
Wolę używać symlinksnarzę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