Чтобы узнать размер некоторой группы файлов

Чтобы узнать размер некоторой группы файлов

Я пытался узнать общий размер всех файлов, принадлежащих конкретному пользователю.

Пытаясь сделать это, я получаю разные размеры при выполнении разных команд.

Какая команда верна для определения общего размера всех файлов, принадлежащих конкретному пользователю?

$ find . -type f -user silviya|ls -lh|head -1 
total 68K
$ find . -type f -user agalya|wc -c
284
$ find . -type f -user agalya|du -sk
120 .

В чем причина такого различия?

решение1

В:

find . -type f -user silviya|ls -lh|head -1 

вы передаете вывод в find, lsно lsне читаете его ввод. Он принимает список файлов для перечисления в качестве аргументов. При отсутствии аргументов, как здесь, он перечисляет не скрытые файлы в текущем каталоге. Так что здесь вы получаете использование диска всеми не скрытыми файлами (любого типа) в текущем каталоге (с размером данного файла, подсчитанным для каждой из его жестких ссылок).

В:

find . -type f -user agalya|wc -c

Вы подсчитываете количество байтов в выходных данных find, поэтому это размер путей к файлам (и разделителей новой строки), а не их использование на диске или размер файла.

В:

find . -type f -user agalya|du -sk

Как и ls, duпринимает список файлов в качестве аргументов, а не из входных данных. Так что здесь вы получаете использование диска всеми файлами и каталогами в текущем каталоге (рекурсивно).

Чтобы получить данные об использовании диска всеми обычными файлами, принадлежащими agalya, с помощью утилит GNU, вам нужно сделать следующее:

find . -type f -user agalya -print0 | du -hc --files0-from=- | tail -n 1

--files0-fromсообщает du(только GNU du) о необходимости взять список файлов из стандартного ввода (представленного -здесь). -cвыдает совокупный размер (обратите внимание, что жесткие ссылки одного и того же файла учитываются только один раз).

Чтобы получить файлочевидныйразмер в отличие от использования диска, добавьте --apparent-sizeопцию du(опять же, специфичную для GNU). Добавьте -lопцию (также специфичную для GNU) для подсчета жестких ссылок несколько раз.

решение2

Команда №1 выдает общий размер «полезных» байтов файлов, их содержимого.

Команда №3 выдает используемое дисковое пространство для хранения файлов. Диски делятся на блоки (часто длиной 4 КБ), которые не могут совместно использоваться несколькими файлами. Таким образом, файл любого размера от 1 до 4096 Б будет использовать 4 КБ дискового пространства, например [Это упрощенно. В некоторых типах файловых систем, таких как ext, очень маленькие файлы могут храниться в самой таблице файлов, не используя вообще никаких блоков данных.]

Команда №2 просто подсчитывает количество символовимена файлов. (Размер вывода команды find.)

Связанный контент