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

Я использовал бы любой SCM, который не имеет пессимистической блокировки ( http://old.davidtanzer.net/?q=node/118 ) механизмами. Особенно, потому что Вы хотите, чтобы люди были в состоянии "отредактировать" тот же файл одновременно в любом значительном проекте.

Лично я выбрал бы SVN с некоторым решением для распределения, но с тех пор в SVN Вы только отправляете то, что Вы изменяете (который должен быть очень мало для каждой фиксации так или иначе), сеть наверху является очень маленькой. Также загрузка сервера может быть обработана с большим количеством аппаратных средств к некоторой точке. Я еще не нашел потолок для аппаратного масштабирования при использовании SVN.

Другой выбор может включать "мерзавца", которого используют люди Ядра Linux, но у меня действительно нет опыта с этим.

15
задан DKSRathore 29 November 2009 в 06:56
поделиться

2 ответа

Найти символические ссылки просто:

% find . -type l

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

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

% find . -type f \! -links 1

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

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

% find . -type f -links +1

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

28
ответ дан 1 December 2019 в 01:38
поделиться

@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
2
ответ дан 1 December 2019 в 01:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: