У меня есть каталог с большим количеством разных файлов. Можно ли рассчитать средний размер файлов с определенным типом файлов, в моем случае * .txt? Я хочу сделать это для всех * .txt в текущем каталоге и подпапках.
2 ответа
Вы можете использовать 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.
Используя команду du
которая может произвести общее количество всех перечисленных файлов:
echo $(( $(du -sbc *.txt | tail -1 | cut -f 1) / $(ls *.txt | wc -l) ))
Используйте -k
или -m
вместо -b
для других единиц измерения.