Перечислите все файлы с несколькими жесткими ссылками и связанным путем

Как я могу перечислить все файлы с жесткими ссылками и связанными путями?

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