Скрипт cтатистики по файлам в папке

📅
⏱️ 1 min read
#bash #linux #ubuntu

Простой bash-скрипт для анализа файлов в директории с выводом полезной статистики. Изначально создавался для анализа архивов на FTP-сервере, но может использоваться для любых файлов.

Что делает скрипт

  • Сканирует текущую папку и находит все ZIP-архивы
  • Вычисляет средний и медианный размер файлов
  • Подсчитывает количество файлов больше и меньше 10MB
  • Выводит результаты в удобном формате

Использование

Просто запустите скрипт в папке с файлами:

./file_stats.sh

Результат будет примерно таким:

Средний размер: 2458 KB
Медианный размер: 1024 KB
Файлов больше 10MB: 3
Файлов меньше 10MB: 47

Код скрипта

#!/bin/bash

# Сохраняем размеры всех файлов в байтах во временный файл
find . -name "*.zip" -type f -printf "%s\n" > /tmp/sizes.txt

# Вычисляем средний размер в KB
avg=$(awk '{ sum += $1 } END { print sum/NR/1024 }' /tmp/sizes.txt)

# Вычисляем медианный размер в KB
median=$(sort -n /tmp/sizes.txt | awk '
  BEGIN { CONVFMT = "%.2f" }
  { a[NR] = $1 }
  END {
    if (NR%2==1) print a[(NR+1)/2]/1024;
    else print (a[NR/2]+a[NR/2+1])/2/1024
  }
')

# Считаем файлы больше и меньше 10MB
counts=$(awk '
  BEGIN { big=0; small=0 }
  { if ($1 > 10*1024*1024) big++; else small++ }
  END { print big " " small }
' /tmp/sizes.txt)

# Извлекаем значения счетчиков
read big_count small_count <<< "$counts"

# Выводим результаты
echo "Средний размер: ${avg%.*} KB"
echo "Медианный размер: ${median%.*} KB"
echo "Файлов больше 10MB: $big_count"
echo "Файлов меньше 10MB: $small_count"

# Очищаем временные файлы
rm /tmp/sizes.txt

Настройка

Можно легко адаптировать скрипт под свои нужды:

  • Изменить маску файлов (*.zip на *.pdf, *.* и т.д.)
  • Поменять пороговый размер (сейчас 10MB)
  • Добавить дополнительную статистику

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