Unix найти средний размер файла - PullRequest
20 голосов
/ 08 февраля 2012

У меня есть каталог с кучей файлов. Я хочу найти средний размер этих файлов, чтобы что-то вроде ls что-то здесь Какой средний размер файла соответствует всем этим?

Ответы [ 7 ]

35 голосов
/ 08 февраля 2012

Я нашел кое-что здесь:
http://vivekjain10.blogspot.com/2008/02/average-file-size-within-directory.html

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

ls -l | gawk '{sum += $5; n++;} END {print sum/n;}'
21 голосов
/ 18 января 2013

Короткий, общий и рекурсивный вариант ответа Ernstsson :

find ./ -ls | awk '{sum += $7; n++;} END {print sum/n;}'

Или, например, если вы хотите помешать файлам размером более 100 КБ отклониться от среднего значения:

find ./ -size -100000c -ls | awk '{sum += $7; n++;} END {print sum/n;}'
4 голосов
/ 08 февраля 2012

Используйте wc -c *, чтобы получить размер всех файлов, и ls | wc -l, чтобы получить количество файлов.Затем просто разделите одно на другое.

2 голосов
/ 02 октября 2013

ду-ш. # дает общее пространство, используемое каталогом

найти. тип F | wc -l # count количество файлов

делим первое на второе. Если вы хотите один лайнер, вот он:

echo $(( `du -sb | tr '.' ' '` / `find . -type f | wc -l` ))
1 голос
/ 14 сентября 2018

Это работает переносимо, даже в AIX.Выводит среднее число байтов для простых файлов в указанном каталоге (${directory} в приведенном ниже примере):

find "${directory}" '!' -path "${directory}" -prune -type f -ls | awk '{s+=$7} END {printf "%.0f\n", s/NR}'

Не нужно самостоятельно подсчитывать количество файлов.NR - это встроенный в awk номер строки.

Часть '!' -path ${directory} -prune - это переносимый способ достижения эквивалента GNU find -maxdepth 1 путем сокращения любого пути, который не совпадает с тем, который мыначать с, игнорируя тем самым любые подкаталоги.

Настройте ограничения на количество файлов для подсчета.Например, чтобы усреднить все файлы, кроме *.sh в текущем каталоге, вы можете добавить '!' -name '*.sh':

find . '!' -path . -prune -type f '!' -name '*.sh' -ls | awk '{s+=$7} END {printf "%.0f\n", s/NR}'

или считать только *.mp3 и включить все подкаталоги (удалить '!' -path . -prune):

find . -type f -name '*.mp3' -ls | awk '{s+=$7} END {printf "%.0f\n", s/NR}'
1 голос
/ 02 октября 2013

Они находят размер каталога и определяют количество свободного дискового пространства, которое существует на вашем компьютере. Команда, которую вы бы использовали, чтобы найти размер каталога, это 'du'. А чтобы найти свободное место на диске, вы можете использовать 'df'.

Вся информация, представленная в этой статье, доступна на страницах man для du и df. Если вам скучно читать справочные страницы и вы хотите быстро выполнить свою работу, тогда эта статья для вас.

-

'du' - Поиск размера каталога

$ du

Ввод приведенного выше в приглашении дает список каталогов, которые существуют в текущем каталоге, а также их размеры. Последняя строка вывода дает вам общий размер текущего каталога, включая его подкаталоги. Указанный размер включает размеры файлов и каталогов, которые существуют в текущем каталоге, а также во всех его подкаталогах. Обратите внимание, что по умолчанию размеры указаны в килобайтах.

**$ du /home/david**

Приведенная выше команда выдаст вам размер каталога / home / david

**$ du -h**

Эта команда дает вам лучший результат, чем по умолчанию. Опция «-h» обозначает читабельный формат. Таким образом, к размерам файлов / каталогов добавляется суффикс «k», если его килобайт, и «M», если его мегабайт, и «G», если это гигабайт.

**$ du -ah**

Эта команда будет отображать в своем выводе не только каталоги, но и все файлы, которые присутствуют в текущем каталоге. Обратите внимание, что 'du' всегда считает все файлы и каталоги, указав окончательный размер в последней строке. Но '-a' отображает имена файлов вместе с именами каталогов в выводе. '-h' - снова читаемый человеком формат.

**$ du -c**

Это дает вам итоговую сумму в качестве последней строки выходных данных. Таким образом, если ваш каталог занимает 30 МБ, последние 2 строки вывода будут

30M. Всего 30M

Первая строка будет последней строкой по умолчанию в выводе 'du', указывающей общий размер каталога, и другой строкой, отображающей тот же размер, за которой следует строка 'total'. Это полезно в случае, если вы используете эту команду вместе с командой grep для отображения только итогового общего размера каталога, как показано ниже.

**$ du -ch | grep total**

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

Примечание. В случае, если вы не знакомы с трубами (что делает возможной указанную выше команду), обратитесь к статье № 24. Также grep является одной из самых важных команд в Unix. Обратитесь к статье № 25, чтобы узнать больше о grep.

**$ du -s**

Здесь отображается сводная информация о размере каталога. Это самый простой способ узнать общий размер текущего каталога.

**$ du -S**

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

**$ du --exculde=mp3**

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

  • 'df' - поиск свободного места на диске / использование диска

    $ df

Набрав выше, выдает таблицу, состоящую из 6 столбцов. Все столбцы очень просты для понимания. Помните, что в столбцах «Размер», «Использовано» и «Доступно» в качестве единицы используются килобайты. В столбце «Использовать%» отображается процент использования, что также очень полезно.

**$ df -h**

Отображает тот же вывод, что и предыдущая команда, но «-h» обозначает читабельный формат.Следовательно, вместо килобайта в качестве единицы выходной сигнал будет иметь «M» для мегабайтов и «G» для гигабайтов.

Большинство пользователей не используют другие параметры, которые можно передать в 'df'.Поэтому я не буду их обсуждать.

Я покажу вам пример, который я использую на своей машине.Я фактически сохранил это как скрипт под названием «использование», так как я использую его часто.

Пример:

Мой Linux установлен на / dev / hda1, и я также смонтировал разделы Windows (по умолчанию каждый раз при загрузке Linux).Таким образом, «df» по умолчанию показывает мне использование диска в Linux и Windows.И меня интересует только использование диска разделами Linux.Это то, что я использую:

**$ df -h | grep /dev/hda1 | cut -c 41-43**

Эта команда отображает на моем компьютере следующееразделы, а затем извлекает строки с / dev / hda1, так как меня интересует только это.Затем он обрезает символы от 41-го до 43-го столбца, поскольку они являются столбцами, отображающими использование в%, что я и хочу.

Есть еще несколько опций, которые можно использовать с'du' и 'df'.Вы можете найти их в справочных страницах.

0 голосов
/ 15 марта 2019

Использовать du до оценка использования файлового пространства для данного каталога.

du -sh /Your/Path # Average file size in human readable format

-s (--summarize) отображать только общее количество для каждогоаргумент.

-h (--human-readable) размеры отпечатков в удобочитаемом формате (например, 1K , 234M , 2G ).

Обратите внимание: если вы не используете -h, размер блока по умолчанию будет равен ( 512-байтовых блоков ).

Если вы хотите , укажите размер блока вы можете использовать -k (килобайт) , -m (мегабайт) или -g (гигабайт) .

du -sk /Your/Path # Average file size in Kilobytes.

Сноска: Использование пути к файлу даст размер указанного файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...