У меня есть каталог с большим количеством разных файлов. Можно ли рассчитать средний размер файлов с определенным типом файлов, в моем случае * .txt? Я хочу сделать это для всех * .txt в текущем каталоге и подпапках.

2 ответа2

1

Вы можете использовать stat -c%s *filename* чтобы получить размер каждого файла, и ls -l *.txt | wc -l (обратите внимание, что ls выдаст ошибку, если в каталоге нет файлов * .txt), чтобы получить количество файлов .txt в текущем каталоге.

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

Следующий скрипт напечатает средний размер всех файлов * .txt в текущем каталоге

#!/bin/bash

tsize=0
fcount=`ls -l *.txt | wc -l`

for f in *.txt
do
    fsize=`stat -c%s $f`
    tsize=`expr $tsize + $fsize`
done
average=`echo "$tsize / $fcount" | bc -l`
echo "Average size: $average"

Обратите внимание, что вы получите сообщение об ошибке от ls если в текущем каталоге нет файлов .txt.

0

Используя команду du которая может произвести общее количество всех перечисленных файлов:

echo $(( $(du -sbc *.txt | tail -1 | cut -f 1) / $(ls *.txt | wc -l) ))

Используйте -k или -m вместо -b для других единиц измерения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .