Мы уже говорили о многих командах Linux, которые вы можете использовать для того, чтобы сделать свою работу с этой системой проще. В сегодняшней статье поговорим о такой вещи, которая становится нужной не очень часто. Сегодня мы рассмотрим как посчитать количество файлов в папке Linux различными способами с помощью разных команд.
Это может быть полезно во многих случаях, например, при написании различных скриптов и других подобных работ. Я попытаюсь охватить все возможные способы сделать это в терминале.
Содержание статьи
Как посмотреть количество файлов в папке Linux
Самый простой способ решить эту задачу - использовать утилиту ls вместе с утилитой wc. Они покажут сколько файлов находится в текущей папке:
ls -l | wc
В моем случае утилита выдала результат 21, но поскольку ls выводит размер всех файлов в папке строкой total, то у нас файлов на один меньше. Нужно учесть, что тут отображаются еще и директории. Каждая директория начинается с символа "d", а каждый файл с "-". Для символических ссылок используется "l". Посмотрите внимательно на вывод ls:
ls
Чтобы их отсеять используйте grep:
ls -l | grep "^-" | wc
Эта конструкция выберет только те строки, которые начинаются на дефис. Если вас интересуют не только обычные файлы, но и скрытые, то можно использовать опцию -a:
ls -la | grep "^-" | wc
Так можно подсчитать количество папок:
ls -la | grep ^d | wc
А так символических ссылок:
ls -la | grep ^l | wc
Если вам нужно подсчитать количество файлов во всех подпапках, то можно использовать опцию -R:
ls -laR | grep "^-" | wc
С фильтром только файлы нам уже не страшно, что команда будет выводить служебную информацию. Если вы не хотите использовать ls, можно воспользоваться утилитой find:
find . -maxdepth 1 -type f | wc
Если нужно смотреть не только количество файлов в папке, но и подпапок, просто не нужно использовать -type f:
find . -maxdepth 1 | wc
Только папки отдельно:
find . -maxdepth 1 -type d | wc
А в случае, когда необходимо перебрать все файлы во всех подпапках, не устанавливайте параметр -maxdepth:
find . | wc
Все эти команды это очень хорошо, но есть еще одно, более удобное средство посчитать количество файлов linux, это утилита tree.
Количество файлов в папке с помощью tree
Утилита tree выводит дерево файлов и папок, а потом подсчитывает их количество по отдельности. Кроме того, утилита имеет множество опций и настроек. Но она не поставляется в системе по умолчанию. Для ее установки в Ubuntu выполните:
$ sudo apt install tree
Синтаксис утилиты очень прост:
$ tree опции каталог
Теперь разберем ее основные опции:
- -a - выводить все файлы, включая файлы, которые начинаются на точку;
- -d - выводить только директории;
- -l - открывать символические ссылки;
- -f - выводить полный путь к файлу;
- -x - оставаться только в пределах этого раздела, не переходить по точкам монтирования;
- -L - устанавливает максимальный уровень вложенности;
- -P - выбирать только те файлы и папки, которые подходят под регулярное выражение;
- -I - не выводить файлы, которые подходят под регулярное выражение;
- --prune - не выводить пустые папки;
- -o - записать вывод в файл;
В утилиты есть еще опции по сортировке выводимого дерева и по формату вывода имен файлов, но мы не будем их рассматривать, поскольку нас интересует только количество файлов в папке Linux. Сначала считаем количество файлов и папок во всех подпапках:
tree
Теперь только в текущей, задаем максимальную вложенность равной единице:
tree -L 1
Еще можем включить вывод всех файлов, включая скрытые:
tree -aL 1
Или выберем только те, которые содержат второй символ в имени "a":
tree -aL 1 -P ?а*
Выводы
В этой небольшой статье мы рассмотрели как посмотреть количество файлов в папке Linux. Как видите, это очень просто. Надеюсь, эта информация была полезной для вас. Если у вас остались вопросы, спрашивайте в комментариях!
а зачем в grep символ - "^"?
Якорь начала строки.
публиковать ответы консоли вместо текста в виде огромных картинок это решение на 10 баллов )
Убираете -l в ls и все прекрасно работает без всяких grep
ls | wc -l
Поиск по скрытым папкам из каталога /home/юзер/Видео
ls -la | grep ^d | wc
3 (три папки)
выдаёт не совсем то что надо
ls -la
d_________________ ./
d_________________ ../
d_________________ Папка/
в каталоге home/юзер/Видео есть всего одна "Папка", в чём затык?
А вот так работает:
ls -lA | grep ^d | wc
1 (одна папка)
-A — не отображать ссылку на текущую папку и корневую папку ". "и ".."