Чтение онлайн

на главную

Жанры

Linux программирование в примерах

Роббинс Арнольд

Шрифт:

8.5. Обход дерева файлов: GNU

du

GNU версия

du
в GNU Coreutils использует
nftw
для обхода одной или более иерархии файлов, собирая и выводя сведения, касающиеся количества используемого дискового пространства. У нее большое число опций, которые управляют ее поведением но отношению к символическим ссылкам, форматом вывода чисел и т.д. Это делает разбор кода труднее, чем могло бы быть при более простой версии. (Однако, мы не собираемся позволить этому остановить нас.) Вот сводка опций
du
, которые вскоре будут полезны, когда мы рассмотрим код.

$ du --help

Usage: du [OPTION]... [FILE]...

Дает сводку использования диска для каждого FILE,

рекурсивно для каталогов.

Обязательные для длинных опций аргументы являются обязательными

также и для коротких опций.

– a, --all записать число всех файлов, а не только

каталогов

– -apparent-size вывести видимые размеры, а не использование

диска; хотя видимый размер обычно меньше, он

может быть и больше из-за дыр в файлах,

внутренней фрагментации, косвенных блоков и т.п.

– В, --block-size=SIZE использовать блоки размером SIZE байтов

– b, --bytes эквивалентно '--apparent-size --block-size=1'

– с, --total выводит итоговую сумму

– D, --dereference-args разыменовывать FILE, которые являются

символическими ссылками

– h, --human-readable вывести размеры в удобном для восприятия

формате (например, 1K 234М 2G)

– Н, --si так же, но использовать степени 1000, не 1024

– k подобно --block-size=1K

– l, --count-links считать размеры несколько раз при прямых

ссылках

– L, --dereference разыменовывать все символические ссылки

– S, --separate-dirs не включать размер подкаталогов

– s, --summarize отобразить для каждого аргумента лишь итоги

– х, --one-file-system пропускать каталоги на различных файловых

системах

– X --exclude- исключить файлы, подходящие под любой

FILE from=FILE образец в FILE

– -exclude=PATTERN исключить файлы, соответствующие PATTERN

– -max-depth=N вывести итог для каталога (или файла, с --all)

только если он находится на N или менее уровней

глубже аргумента командной строки;

– -max-depth=0 то же самое, что и --summarize

– -help отобразить экран справки и выйти

– -version вывести сведения о версии и выйти

SIZE может быть (или может быть целым, за которым

может следовать это) одним из

следующих: kB 1000, K 1024, MB 1 000 000, M 1 048 576 и т.д.

для G, T, Р, E, Z, Y.

Чтобы еще больше усложнить дело,

du
использует частную версию
nftw
, у которой есть несколько расширений. Сначала имеются дополнительные значения флагов для функции обратного вызова:

FTW_DCHP

Это значение означает, что

nftw
не может выполнять '
chdir("..")
'.

FTW_DCH

Это значение означает, что

nftw
не может использовать
chdir
для перехода в сам каталог.

FTW_DPRE

Частная

nftw
вызывает для каталогов функцию обратного вызова дважды. Это значение используется при первой встрече с каталогом. После обработки всех нижележащих объектов каталога используется стандартное значение
FTW_DP
.

Частная

nftw
добавляет также в
struct FTW
новый член,
int skip
. Если текущий объект является каталогом и функция обратного вызова устанавливает в поле
skip
ненулевое значение,
nftw
не будет больше обрабатывать этот каталог. (Функция обратного вызова должна установить
skip
таким образом, когда
flag
равен
FTW_DPRE
; делать это для
FTW_DP
слишком поздно.)

С этим объяснением за поясом, вот функция

process_file
из
du.c
. Номера строк приведены относительно начала функции:

1 /* Эта функция вызывается один раз для каждого объекта файловой

2 системы, с которой сталкивается nftw. nftw осуществляет сначала

3 поиск вглубь. Эта функция знает это и собирает итоги для каталогов

4 на основе изменений в глубине текущего элемента. */

5

6 static int

7 process_file(const char *file, const struct stat *sb,

8 int file_type, struct FTW *info)

Поделиться:
Популярные книги

Гримуар темного лорда II

Грехов Тимофей
2. Гримуар темного лорда
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Гримуар темного лорда II

Точка Бифуркации

Смит Дейлор
1. ТБ
Фантастика:
боевая фантастика
7.33
рейтинг книги
Точка Бифуркации

Древесный маг Орловского княжества 5

Павлов Игорь Васильевич
5. Орловское княжество
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Древесный маг Орловского княжества 5

По осколкам твоего сердца

Джейн Анна
2. Хулиган и новенькая
Любовные романы:
современные любовные романы
5.56
рейтинг книги
По осколкам твоего сердца

На границе империй. Том 10. Часть 5

INDIGO
23. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 5

На границе империй. Том 9. Часть 2

INDIGO
15. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 2

Вернувшийся: Корпорация. Том III

Vector
3. Вернувшийся
Фантастика:
космическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Вернувшийся: Корпорация. Том III

Неучтенный элемент. Том 9

NikL
9. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 9

Черный Маг Императора 6

Герда Александр
6. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
7.00
рейтинг книги
Черный Маг Императора 6

Неудержимый. Книга XXX

Боярский Андрей
30. Неудержимый
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Неудержимый. Книга XXX

Мы друг друга не выбирали

Кистяева Марина
1. Мы выбираем...
Любовные романы:
остросюжетные любовные романы
прочие любовные романы
современные любовные романы
5.00
рейтинг книги
Мы друг друга не выбирали

Третий Генерал: Тома I-II

Зот Бакалавр
1. Третий Генерал
Фантастика:
городское фэнтези
попаданцы
аниме
сказочная фантастика
5.00
рейтинг книги
Третий Генерал: Тома I-II

Черный рынок

Вайс Александр
6. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
космоопера
5.00
рейтинг книги
Черный рынок

Кодекс Охотника. Книга XII

Винокуров Юрий
12. Кодекс Охотника
Фантастика:
боевая фантастика
городское фэнтези
аниме
7.50
рейтинг книги
Кодекс Охотника. Книга XII