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

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

Это должен быть отсортированный список inode идентификатором.

Править: уверенный, я имею в виду все файлы с hardlink числом> =2

Я думал о списке как

INODE_ID   FILEPATH

1234 /tmp/test1
1234 /tmp/test2
3245 /tmp/test4
3245 /tmp/test3
2
задан 1 May 2017 в 11:04

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', печатают ее inode число и называют
  • | sort -V и вид, которые производят "естественно"

, можно заменить * путем к файлам, например /tmp/*, который заставит полный путь быть распечатанным. Если Вы хотите искать рекурсивно, можно использовать shopt -s globstar и затем ** в пути, например /tmp/**

find имеет -links тест, но , это, кажется, только берет целое число , необходимо будет читать ответ Ravexina для решения, которое использует его.

1
ответ дан 2 December 2019 в 01:55

Вот мое решение с 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.
4
ответ дан 2 December 2019 в 01:55

Другие вопросы по тегам:

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