Рекурсивно находить файлы с определенным количеством жестких ссылок

672
imsodin

У меня есть каталог для отслеживания, содержащий жесткие ссылки на файлы / каталоги во втором каталоге (используется для отслеживания перемещений / переименований). Если я удаляю что-то в исходной папке, дисковое пространство не освобождается, поскольку его жесткая ссылка все еще существует. Поэтому я хочу периодически очищать этот «отслеживающий» каталог. Поэтому мне нужно найти в нем все файлы с количеством жестких ссылок 1.

Какой самый быстрый способ найти (и удалить) рекурсивно все файлы с количеством жестких ссылок 1?

Я знаю, что могу сделать что-то вроде этого, find . -type f -exec ls -l {} \+ | grep -P "^.1"а затем еще кое-что сделать, но это уродливо и медленно. Я ищу что-то чище и быстрее.

3
Проверьте, поддерживает ли ваш `find` опцию` -links`. Kamil Maciorowski 7 лет назад 2
@KamilMaciorowski Большое спасибо. Я тупо только greped man для "hard" и, таким образом, не нашел эту опцию. imsodin 7 лет назад 1

1 ответ на вопрос

4
Kamil Maciorowski

У меня findесть -linksвариант (я на Ubuntu 14.04.5 LTS). Чтобы найти файлы, которые не имеют других жестких ссылок, используйте:

find -type f -links 1 

Команда для удаления этих файлов:

find -type f -links 1 -exec rm -f {} + 

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