Перечислите все файлы с несколькими жесткими ссылками и связанным путем
Как я могу перечислить все файлы с жесткими ссылками и связанными путями?
Это должен быть отсортированный список по идентификатору inode.
РЕДАКТИРОВАТЬ: конечно, я имею в виду все файлы с номером жесткой ссылки>=2
Я думал о списке, как
INODE_ID FILEPATH
1234 /tmp/test1
1234 /tmp/test2
3245 /tmp/test4
3245 /tmp/test3
2 ответа
Решение
Хорошо, в таком случае возможно
for i in /tmp/**; do
[[ -f "$i" ]] &&
(( $(stat -c %h "$i") > 1 )) &&
stat -c '%i %n' "$i"
done | sort -V
Заметки
for i in *для каждого файла в текущем каталоге[[ -f "$i" ]] &&если это обычный файл и(( $(stat -c %h "$i") > 1 ))если у него более одной жесткой ссылкиstat -c '%i %n'напечатайте его номер и имя| sort -Vи сортировать этот вывод "естественно"
Вы можете заменить * с путем к файлам, например /tmp/* что приведет к печати полного пути. Если вы хотите искать рекурсивно, вы можете использовать shopt -s globstar а потом ** в пути, например /tmp/**
find имеет -links проверить, но кажется, взять только целое число вам придется прочитать ответ Равексины, чтобы найти решение, которое его использует.
Вот мое решение с find:
find . -links +1 -type f -name '*' -printf '%i %p\n' | sort
.: поиск в текущем каталоге, вы можете изменить его на что-нибудь еще, например:/,~/ravexina, так далее.-links +1: только файлы с более чем 1 ссылкой (> = 2).-type f: только файлы (не каталоги, ссылки sym, файлы каналов и т. д.).-name '*': все файлы с чем-либо в их именах, несмотря ни на что.-printf '%i %p\n': только печатьinode,file pathи новая линия\n,sort: сортировка строк на основе инодов.