Вычислите средний размер файла

Существует экранная команда, чтобы сделать это. Из руководства:

Команда: sessionname [имя]

(ни один)

Переименуйте текущую сессию. Отметьте это screen -list имя обнаруживается с предварительно ожидаемым идентификатором процесса. Если имя аргумента опущено, название этой сессии отображено.

Внимание: $STY переменная среды все еще отражает старое название. Это может привести к беспорядку. Значение по умолчанию создается из tty и имен хостов.

Для доступа к экранной командной строке используйте Префикс: где Префикс обычно является Ctrl-a.

Таким образом, необходимо будет, скорее всего, сделать так: Ctrl-a:sessionname [name]

11
01.02.2013, 17:43
4 ответа

С FreeBSD / Mac OS X find, stat и awk (не точно удобная острота, хотя):

find -x . -type f -maxdepth 1 -exec sh -c 'stat -f '%z' "${@}"' _ '{}' + | 
LC_ALL=C awk -v pwd="${PWD}" '
   BEGIN{ sum=0; count=0; }
   { sum+=$1; ++count; }
   END{ 
        if (count == 0) exit;
        printf ("number of files: %d\n", count); 
        printf ("average file size in B: %.5f\n", sum/count); 
        printf ("average file size in KB: %.5f\n", (sum/count) / 1024); 
        printf ("average file size in MB: %.5f\n", (sum/count) / (1024*1024)); 
        printf ("directory: %s\n", pwd); 
   }
'
3
27.01.2020, 19:57
  • 1
    Отметьте это в -v var=value, awk развернет ANSI C последовательности как \n, \r... В то время как оболочки действительно экспортируют PWD, таким образом, можно использовать ENVIRON["PWD"] в awk который не имеет такой проблемы для каталогов, имеющих обратные косые черты на их имя. –  Stéphane Chazelas 02.02.2013, 19:58
  • 2
    Если Вам просто нужен средний размер в байтах, можно использовать find . -type f -exec stat -f%z {} +|awk '{s+=$0}END{print s/NR}'. –  Lri 29.04.2014, 11:55

С GNU найдите:

find . -type f -printf '%s\n' | awk '{s+=$0}
  END {printf "Count: %u\nAverage size: %.2f\n", NR, s/NR}'

Или для использования диска:

find . -type f -printf '%k\n' | awk '{s+=$0}
  END {printf "Count: %u\nAverage size: %.2f\n", NR, s*1024/NR}'

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

Вышеупомянутое только считает регулярные файлы, не символьные ссылки или каталоги или другие специальные файлы. Это включает скрытые файлы.

То же с zsh builtins:

zmodload -i zsh/stat
count() {zstat -Hs -- $REPLY; ((size+=$s[size], count++, 0))}
size=0 count=0
**/*(oNDN.+count)
print -f "Count: %s\nAverage size: %.2f\n" $count $(($size./count))
11
27.01.2020, 19:57

Упрощенное решение в одной строке:

ls -Rl -- "$DIR" | awk 'BEGIN{sum=0;count=0};/^-/{sum+=$5;++count};END{print sum/count}'

Это имеет синтаксический обман в нем, только рассматривая ls выходные строки, которые начинаются с '-', который должен, составляют данные для регулярных файлов.

3
27.01.2020, 19:57

только для файлов в каталоге, игнорируя подкаталоги:

expr $(du -Ss | cut -f1) / $(find /path/to/dir -maxdepth 1 -type f | wc -l)

Или считать все файлы включая файлы в подкаталогах:

expr $(du -s | cut -f1) / $(find /path/to/dir -type f | wc -l)
2
27.01.2020, 19:57
  • 1
    я хотел бы не проигнорировать подкаталоги. –  taffer 01.02.2013, 17:46
  • 2
    . Просто добавьте-k к du вызову, чтобы иметь результат в 1024 байтах (КБ) вместо 512 байтов (размер по умолчанию блока файла). –  Olivier Dulac 01.02.2013, 18:30
  • 3
    du -s сложит использование диска (не размер) всех файлов и каталогов и других нерегулярных файлов, исключая дополнительные жесткие ссылки на тот же файл, в то время как find будет считать все регулярные файлы. Кроме того, имена файлов с символами новой строки будут несколько раз считаться. du -S конкретный GNU. du -s сообщат секторы или килобайты в зависимости от ОС. –  Stéphane Chazelas 01.02.2013, 19:20
  • 4
    Как обычный @StephaneChazelas Ваше знание linux/unix изумляет меня и показывает мне, насколько грязный мои быстрые и грязные решения. Сколько времени Вы использовали linux/unix? –  Drake Clarris 01.02.2013, 20:14
  • 5
    Ответ является ужасно неправильным и должен быть удален. Объясненный Stephane. –  Acumenus 16.05.2014, 23:57

Теги

Похожие вопросы