#!/bin/bash
find "$1" ! -type d |
while read fpath; do
fname="${fpath##*/}"
suffix="${fname##*.}"
if [[ "$suffix" == "$fname" ]]; then
suffix="(none)"
fi
size="$( stat --format '%s' "$fpath" )"
printf '%s\t%d\n' "$suffix" "$size"
done |
awk '{ sz[$1] += $2 }
END { for (s in sz) { printf("%s:\t%d\n", s, sz[s]) } }'
Учитывая каталог в командной строке, приведенный выше сценарий bash
будет использовать stat
1 для получить размер каждого отдельного файла в каталоге и ниже в байтах. Цикл while также обрезает суффикс для каждого файла и выводит его вместе с размером файла (в байтах).
awk
сценарий 2 в конце суммирует и распечатывает информацию.
Пример, запуск каталога одного из моих рабочих проектов:
$ bash ./script.sh /home/kk/Work/Development/project/src/
c: 4559172
am: 369
h: 151369
o: 4613432
in: 42216
out: 3282712
(none): 2908962
Po: 18414
txt: 7129
При необходимости вывод может быть дополнительно отфильтрован и отформатирован.
Изменение этого параметра для определения процентов от общего размера или использования файла
для получения типа файла вместо того, чтобы полагаться на суффикс имени файла, или для вывода размеров в единицах, отличных от байтов, оставлено на усмотрение читателя. как на упражнении.
1 Вызов stat
здесь адаптирован для GNU stat
из пакета GNU coreutils. статистика
в OpenBSD полностью отличается.
2 Предполагается, что сценарий awk
запускается реализацией awk
, которая знает об ассоциативных массивах, например GNU awk
или ] mawk
.
Используйте find
вместо ls
. С помощью find
вы можете исключить одно или несколько глобальных выражений. Для вашего примера (и OSX) вы можете сделать
find * -depth 0 -type f ! -name '*.ogg' -ls
, который выдаст что-то вроде ls -l
(только для файлов, учитывая -тип f
):
66294163 0 -rw-r--r-- 1 tom wheel 0 Sep 9 20:12 foo.mp4
With OSX, первый столбец - это значение inode, а затем счетчик ссылок. find
не предоставляет столько возможностей для листинга, сколько ls
:
$ ls -l
total 0
drwx------ 3 thomas wheel 102 Sep 9 15:33 com.apple.launchd.OFStJ79qtq
drwx------ 3 thomas wheel 102 Sep 9 15:33 com.apple.launchd.VQsV1ae6bI
drwx------ 3 thomas wheel 102 Sep 9 15:33 com.apple.launchd.e6HBMt2vnS
drwx------ 3 thomas wheel 102 Sep 9 15:33 com.apple.launchd.he9U4OAIMI
-rw-r--r-- 1 tom wheel 0 Sep 9 20:12 foo.mp4
-rw-r--r-- 1 tom wheel 0 Sep 9 20:12 foo.ogg
, но может быть полезным.