2014-02-04 4 views
0

Когда я попытаюсь получить общий размер размещенных файлов с помощью find. -print0 | xargs -r0 du -chx возвращение товара: 61G итого. Когда я использовать автономный ая -chx мне дает: 2.8T общегоПочему «найти. -print0 | xargs -r0 du -chx» и «du -chx» разные результаты?

% ФР -h дает одинаковый результат: Filesystem Размер Используется Свободен Используйте% Mounted на /DEV/md7 3.6T 2.8T 599G 83%/opt

Где ошибка?

ответ

1

61G - это сумма последнего предмета.

Если вы прокрутите назад или используете grep, вы увидите больше итогов.

find . -print0 | xargs -r0 du -chx|grep total 

Вы запрашиваете «ей -chx» для каждого последующего каталога и подкаталога, а не все вместе.

0

Общее количество 61G, которое вы видите из команды «Найти», - это всего лишь сумма из последней «партии» аргументов, которые видели xargs. (Xargs может принять только ограниченное количество аргументов, так что «общий» вы видите, это не «общий итог».)

Попробуйте это:

find pjproject-2.1.0/ -print0 | xargs -r0 du -chx | grep "total" 

Предполагая, что нет никаких файлов называется «общим », вы увидите список итогов, которые будут более или менее совпадать с результатами команды du.

0

Одна из ошибок заключается в том, что find | du будет добавлять повторяющиеся результаты, например, с помощью структуры каталогов foo/bar/baz, это эффективно сделает «du -chx foo foo/bar foo/bar/baz». Это подсчет foo/bar/baz dir 3 раза. Однако это будет ошибкой на высокой стороне, поэтому не объясняет, что вы видите.

Вторая проблема - количество аргументов, которые вы передаете du. В случае поиска у вас будут тысячи аргументов, а xargs будут обрабатывать их в кусках. На самом деле вы не видите общее количество всех файлов, но промежуточный итог для их части. На этом пути было бы еще несколько промежуточных итогов. Прочтите man-страницу для xargs, в частности -n (max args) и -s (максимальная длина командной строки)

Нормальная вещь здесь - не полагаться на суммы для одного вызова 'du', но делать суммы в другой команде в вашем конвейере. Однако, как только вы попробуете это, вы столкнетесь с первой проблемой, о которой я упоминал, - вы рассчитываете каталоги несколько раз.