Файлы, перечисленные в вашем вопросе, являются блочными устройствами (об этом говорит b
в качестве первого символа в блоке разрешений).
Это означает, что 112
и 24
являются основной и вспомогательной версией первого файла в десятичной записи.
Команда Unix stat
может использоваться для создания списка файлов, использующего пользовательский формат (в отличие от ls
, который знает только несколько фиксированных форматов).
Командная строка, которая вам нужна:
stat --format "%t %n" /toto/*
В спецификаторе формата %t
указывается основная версия файла устройства в шестнадцатеричном формате. %n
перечисляет имя файла (мы используем его для отладки).
112
в шестнадцатеричном формате 0x70
. Команда выше должна вывести:
70 file1
70 file2
Теперь вы можете передать его по grep '^70 '
, а затем по wc -l
, чтобы подсчитать количество строк, начинающихся с 70
(70
, за которым следует пробел):
stat --format "%t %n" /toto/* | grep '^70 ' | wc -l
Если вы хотите узнать, имеют ли все файлы в каталоге /toto/
основную версию 112
, вы можете сравнить число, произведенное вышеупомянутой командой, с числом, произведенным следующей командой (она производит количество файлов и каталоги в каталоге /toto/
) `
ls -1 /toto/ | wc -l
Если вы также хотите узнать, какие файлы имеют другую основную версию, вы можете запустить эту команду:
stat --format "%t %n" /toto/* | grep -v '^70 '
Отфильтровывает строки, которые не начинаются с ^70
, и отображает только файлы с другой основной версией (и их основной версией в шестнадцатеричном формате).
Если он ничего не отображает, тогда все файлы в каталоге /toto/
имеют основную версию 112
.
Примечание: команда выше также выведет список обычных файлов и каталогов, а также других файлов, которые не являются устройствами (только версии имеют устройства).