Мне нужно перечислить каталог рекурсивно, но я хочу пропустить подкаталоги, которые уже были смонтированы.
Есть 2 случая:
a) файловая система была смонтирована дважды, как в этом примере:
- "/ dev / sda2" был смонтирован на "/ mnt / mnt_point1"
- "/ dev / sda2" был смонтирован на "/ mnt / mnt_point2"
Я хочу перечислить "/ mnt", но спускаться только в "/ mnt / mnt_point1"
b) часть файловой иерархии была перемонтирована где-то еще, с помощью "mount --bind":
- "mount --bind / home / user / tmp / test / home / user / tmp / mount_test"
Я хочу перечислить "/ home / user / tmp", но схожу только в "test"
"statfs" и "statvfs" не предоставляют никакой информации, чтобы различить, если каталог был установлен дважды.
Одним из решений было бы прочитать «/ etc / mtab» (как это делает команда «find») и выполнить некоторые проверки, но я думаю, что это довольно дорого (нужно читать / etc / mtab каждый раз, когда встречается dir; если этот файл читается только при запуске программы, между чтениями может произойти монтирование, так что программа будет неточной).
Другим решением будет фильтрация событий ядра (через libudev или Netlink) и выполнение этого чтения / etc / mtab только при возникновении события MOUNT.
У вас есть другие предложения? Заранее спасибо.