Как я могу перечислить все файлы с hardlinks и связанными путями?
Это должен быть отсортированный список inode идентификатором.
Править: уверенный, я имею в виду все файлы с hardlink числом> =2
Я думал о списке как
INODE_ID FILEPATH
1234 /tmp/test1
1234 /tmp/test2
3245 /tmp/test4
3245 /tmp/test3
Хорошо, в этом случае возможно
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'
, печатают ее inode число и называют | sort -V
и вид, которые производят "естественно" , можно заменить *
путем к файлам, например /tmp/*
, который заставит полный путь быть распечатанным. Если Вы хотите искать рекурсивно, можно использовать shopt -s globstar
и затем **
в пути, например /tmp/**
find
имеет -links
тест, но , это, кажется, только берет целое число , необходимо будет читать ответ Ravexina для решения, которое использует его.
Вот мое решение с find
:
find . -links +1 -type f -name '*' -printf '%i %p\n' | sort
.
: поиск в текущем каталоге, можно изменить его на что-либо еще, например: /
, ~/ravexina
, и т.д. -links +1
: только файлы с больше, чем 1 ссылкой (> = 2). -type f
: только файлы (не каталоги, символьные ссылки, передают файлы по каналу, и т.д.). -name '*'
: все файлы с чем-либо на их имена несмотря ни на что. -printf '%i %p\n'
: только печать inode
, file path
и новая строка \n
. sort
: строки вида на основе inodes.