Перечислите все файлы с несколькими жесткими ссылками и связанным путем
Как я могу перечислить все файлы с жесткими ссылками и связанными путями?
Это должен быть отсортированный список по идентификатору 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
: сортировка строк на основе инодов.