Команда dir
списка каталогов Windows имеет в конце строку, показывающую общий объем пространства, занимаемого перечисленными файлами. Например, dir *.exe
отображаются все .exe
файлы в текущем каталоге, их размеры и общая сумма их размеров. Я хотел бы иметь подобную функциональность с моим dir
псевдонимом в bash, но я не уверен, как именно это сделать.
В настоящее время у меня alias dir='ls -FaGl'
в моем .bash_profile
, показывая
drwxr-x---+ 24 mattdmo 4096 Mar 14 16:35 ./
drwxr-x--x. 256 root 12288 Apr 8 21:29 ../
-rw------- 1 mattdmo 13795 Apr 4 17:52 .bash_history
-rw-r--r-- 1 mattdmo 18 May 10 2012 .bash_logout
-rw-r--r-- 1 mattdmo 395 Dec 9 17:33 .bash_profile
-rw-r--r-- 1 mattdmo 176 May 10 2012 .bash_profile~
-rw-r--r-- 1 mattdmo 411 Dec 9 17:33 .bashrc
-rw-r--r-- 1 mattdmo 124 May 10 2012 .bashrc~
drwx------ 2 mattdmo 4096 Mar 24 20:03 bin/
drwxrwxr-x 2 mattdmo 4096 Mar 11 16:29 download/
например. Принимая ответы на этот вопрос :
dir | awk '{ total += $4 }; END { print total }'
который дает мне общее количество, но не печатает сам список каталогов. Есть ли способ изменить это в однострочном или шелл-сценарии, чтобы я мог передать любые ls
аргументы, которые я хочу, dir
и получить полный список плюс общая сумма? Например, я хотел бы запустить, dir -R *.jpg *.tif
чтобы получить список и общий размер этих типов файлов во всех подкаталогах. В идеале было бы здорово, если бы я мог получить размер каждого подкаталога, но это не обязательно.
источник
ls -lh
помогает? Он печатает общую сумму сверху. Вы также можете запустить,du -sh *.exe
чтобы получить информацию об использовании дискового пространства в удобочитаемой форме.ls -lh
печатает «total» , но это не всегда связано с тем, чтоawk
подсчитывают приведенные ниже сценарии, или что я складываю вручную. Иногда оно близко к числу килобайт файлов в каталоге, но, похоже, не учитывает выделенные размеры подкаталогов. Я был бы признателен, если бы выls -lh
не показывает общий размерОтветы:
Следующая функция выполняет большую часть того, что вы просите:
... но это не даст вам того, о чем вы просите
dir -R *.jpg *.tif
, потому что это не такls -R
. Вы можете поиграть сfind
утилитой для этого.источник
dir
это уже название популярного ядра GNU coreutil, я бы не стал называть такую функцию.Для этого уже есть команда UNIX:
du
Просто сделать:
В соответствии с соглашением вы можете добавить один или несколько путей к файлам или каталогам в конце команды.
-h
является расширением для преобразования размера в удобный для пользователя формат,-a
дает вам «кажущийся» размер (размер файла вместо использования диска) и-c
дает итоговое значение в конце.источник
du
дает использование диска, а не сумму размеров файлов.du -h
не суммирует размеры файлов, переданных ему.du -h *.so
показывает размер каждого файла, но не сумму. Я думаю, что вы хотите здесьdu -hc *.so
(или дажеdu -hc *.so | tail -1
). Но, конечно, он тоже хочет получить каталог.-a
значит--all
. Рассмотрим скорее использование--apparent-size
Вы можете использовать
du -h -c directory|tail -1
Это сгенерирует одну строку с использованием памяти.
источник
du -hs directory
если вы хотите только всего.Просто напечатайте текущую строку, которую вы суммируете:
источник
с Perl:
Размер всех не скрытых файлов PDF в текущем каталоге.
источник
Добавление следующего в .bash_profile или .bashrc работает для меня.
Теперь, когда я делаю dir * .mp3, он делает рекурсивно и печатает итог в конце. Вы можете контролировать, какую глубину вы хотите, добавив параметр maxdepth к находке. Я знаю, что поиск дважды - не самая лучшая идея. Но я не мог придумать лучшего пути. По крайней мере, он выполняет свою работу.
источник
Использование du и выражения awk, подобного приведенному выше, обеспечат то, что вы ищете.
Пример:
du /home/abc/Downloads/*.jpg | awk '{ print; total += $1 }; END { print "total size: ",total }'
Это перечислит все файлы в папке «Загрузки» пользователя abc, оканчивающиеся на .jpg, и напечатает сумму всех этих файлов в конце списка.
источник
Чтобы получить как вывод dir, так и расчет размера, без использования других предложенных опций, вы можете использовать tee (1) и процесс подстановки ...
источник
tee
, простоdir | awk '{print; total += $4}; END {print total}'
источник
linux sum human readable sizes
и это то, что я ищу.источник