Скрипты на bash — Определение размера заданных файлов в заданной директории
На работе недавно встал вопрос - узнать размер, занимаемый только исходными кодами в проекте. В общем-то вроде все просто, но в то же время, лично, никогда передо мной такой вопрос не стоял.
Подумав немножко, написал следующий скрипт:
После чего, например вызываем так (пусть скрипт носит название size.sh):
В результате получаем размер, занимаемый файлами с расширением jpg в каталоге ~/wallpapers.
Теперь рассмотрим по строчкам, что делает скрипт:
Такой вот способ. Вероятно способ несколько сложен, но тем не менее, мне он подошел :).
Подумав немножко, написал следующий скрипт:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# |
После чего, например вызываем так (пусть скрипт носит название size.sh):
1 2 |
[digiwhite@*** ~]$ chmod og+x size.sh |
В результате получаем размер, занимаемый файлами с расширением jpg в каталоге ~/wallpapers.
Теперь рассмотрим по строчкам, что делает скрипт:
- #1 - тут и так все ясно, указываем интерпритатор сценария;
- #4 - переменная, которая будет хранить размер в байтах;
- #5 - переменная, которая хранит имя временного файла, в который будут заноситься размеры;
- #7 - самая основная строка - с помощью утилиты find мы вполняем поиск в директории, заданной первым параметром при вызове скрипта. Параметр maxdepth ограничивает глубину сканирования 1 уровнем (можно убрать этот параметр и будут сканироваться все подкаталоги, начиная от заданного). Параметр -type f говорит утилите искать только файлы (симлинки будут пропускаться). Параметр -name "$2" определяет маску поиска, так же задаваемую во время вызова скрипта. -fprintf $temp_file %s'\n' указывает утилите find, что для каждого найденного файла выполнить печать его размера в файл, указанный в переменной $temp_file, при этом размер каждого файла будет находиться на новой строке;
- #8 - получаем размеры всех найденных файлов;
- #10-#12 - в цикле проходим по каждой записи (каждый размер файла) и суммируем их друг с другом;
- #14 - удаляем временный файл, т.к. он больше не нужен;
- #16-#20 - выводим результат в различных еденицах измерения информации
Такой вот способ. Вероятно способ несколько сложен, но тем не менее, мне он подошел :).