Как найти все файлы, которые в основном являются мягкими или жесткими ссылками других каталогов или файлов на linux?

Как я могу получить список всех файлов системы или из определенного каталога. Раньше я создавал ссылки, но со временем они стали неуправляемыми. Мне нужен список всех таких ссылок из каталога. Кто-нибудь может помочь?

4 ответов


найти символические ссылки легко:

% find . -type l

найти жесткие ссылки сложно, потому что если подкаталог рассматриваемого каталога также имеет подкаталоги, то они увеличивают количество жестких ссылок. Вот как подкаталоги связаны со своими родителями в UNIX (это .. запись в каждый подкаталог).

если вы только хотите найти связанный файлы (а не каталоги), это будет работать:

% find . -type f \! -links 1

это работает, потому что файл, который тут у жестких ссылок будет количество ссылок > 1, а у несвязанного файла-количество ссылок == 1, поэтому эта команда ищет все файлы, количество ссылок которых 1

альтернативно, на более новых версиях find вы можете использовать:

% find . -type f -links +1

это работает по той же причине, что и выше; однако более новые версии find могут принимать +n или-n вместо просто числа. Это эквивалентно тестированию для большего или меньшего n, соответственно.


find / -xdev -samefile filename

@OP, если у вас есть GNU find, вы можете найти жесткие ссылки, используя -printf "%n", например,

find /path -type f -printf "%f/%n/%i\n" | while IFS="/" read filename num_hlinks inum
do
 echo "Filename: $filename. Number of hard links: $num_hlinks, inode: $inum"
 # if 2 or more files have the same inode number, then they are hard links. 
 # you can therefore count how many $inum that are the same and determine those hard links, which 
 # you have to try doing yourself.
done

см., например, здесь https://www.gnu.org/software/findutils/manual/html_node/find_html/Hard-Links.html или объединить ответ Alnitak и amber_linux в find -L /where/to/search -samefile /some/link/to/file найти все жесткие и мягкие ссылки на данный файл.