Как найти количество файлов с определенным расширением

от admin

Найдите количество файлов с определенным расширением во всех подкаталогах

Есть ли способ найти количество файлов определенного типа без необходимости перебирать все результаты в Directory.GetFiles () или аналогичном методе? Я ищу что-то вроде этого:

Я знаю, что могу создать рекурсивную функцию для вызова Directory.GetFiles, но было бы намного чище, если бы я мог делать это без всех итераций.

EDIT: Если это невозможно сделать без рекурсии и итерации самостоятельно, как лучше всего это сделать?

7 ответы

Путь указывает путь, searchPattern указывает ваши подстановочные знаки (например, *, * .format), а SearchOption предоставляет возможность включать подкаталоги.

Свойство Length возвращаемого массива этого поиска предоставит правильное количество файлов для вашего конкретного шаблона поиска и параметра:

EDIT: В качестве альтернативы вы можете использовать Directory.EnumerateFiles метод

ответ дан 13 мая ’16, 15:05

Это серьезная проблема с производительностью при большом количестве файлов. — Цель Кай

@Aim — Не могли бы вы (или кто-нибудь еще) дать количественную оценку вашему утверждению? Насколько медленна «массовая проблема с производительностью»? Сколько значит «большое количество файлов»? Решение Jon работает для меня, но я хотел бы знать, когда / как это может стать проблемой. — Пыль

@DavidHAust Причина в том, что GetFiles метод материализует весь список файлов, находящихся в каталоге. Предпочтительный метод для вызова сейчас: Directory.EnumerateFiles поскольку он будет передавать файлы обратно (через yield -подобный механизм), поскольку основной вызов ОС возвращает результаты. — КасперУан

OP датируется 2008 годом . задолго до того, как Directory.EnumerateFiles был даже проблеском в глазах его папы. Не спешите переходить к старым постам, чтобы получить ответы, потому что доступны новые технологии. — Vic

Таким образом, EnumerateFiles значительно медленнее: если вам нужна масштабируемость, это нормально, но в большинстве случаев нет причин принимать удар. — Эамон Нербонн

Name already in use

Count-files / docs / documentation_ru / examples.md

  • Go to file T
  • Go to line L
  • Copy path
  • Copy permalink
  • Open with Desktop
  • View raw
  • Copy raw contents Copy raw contents

Copy raw contents

Copy raw contents

Примеры практического использования

Более детально об общих аргументах path , —all , —case-sensitive , —no-recursion и —no-feedback в разделе Как использовать

Подсчет файлов по расширению: сортированная таблица

Короткая форма аргументов

Длинная форма аргументов

Наиболее простой формой использования является ввод команды без всяких аргументов.
По умолчанию программа будет рекурсивно считать файлы как в текущем рабочем каталоге, так и во всех его подкаталогах и отобразит таблицу, показывающую частоту для каждого расширения файла (например: .txt, .py, .html, .css) и их общее количество.
В этом случае расширения в таблице отображатся в верхнем регистре по умолчанию. Скрытые файлы и папки игнорируются.
Пример:

count_linux_mint

Таблица может быть отсортированна по алфавиту с помощью использования аргумента -alpha или —sort-alpha .
Пример с одним из общих аргументов:

count_windows

Поиск файлов по расширению: список путей к файлам

Короткая форма аргументов

Длинная форма аргументов

Эта утилита также может использоваться для поиска файлов с определенным расширением (используя -fe или -file-extension ) и отображения короткого предварительного просмотра ( -p или —preview ) для текстовых файлов. Размер превью может быть дополнительно настроен с помощью аргумента -ps или —preview-size , за которым следует целое число(количество символов для представления).
Для получения справки о расширениях файлов, для которых доступно превью, используйте аргумент -st или —supported-types .
Результатом поиска по определенному расширению является список с полными путями найденных файлов. Если вам нужна информация о размере файлов, используйте аргумент -fs или —file-sizes .

Поиск и получение списка файлов с определенным расширением

count_linux_mint_fe_txt

search_linux_mint_with_args

Поиск и получение списка файлов без расширения

Для поиска файлов без расширения используйте символ . (точка)
Файлы с такими именами как .gitignore , Procfile , _netrc , считаются не имеющими расширения.
Пример: count-files —file-extension .

Поиск и получение списка всех файлов

Используйте две точки без пробелов .. для поиска всех файлов с расширением или без него.
Пример: count-files —file-extension ..

Общее количество файлов

Короткая форма аргументов

Длинная форма аргументов

Если вам нужно только общее количество всех файлов, количество файлов с определенным расширением или без него используйте аргумент -t или —total .
Чтобы подсчитать общее количество файлов, вы должны указать имя расширения.

Подсчет общего количества файлов с определенным расширением

total_windows

Подсчет общего количества файлов без расширения

Используйте символ . (точка) для подсчета общего количества файлов без расширения.
Пример: count-files —total .

Подсчет общего количества файлов независимо от расширения

Используйте две точки без пробелов .. для подсчета всех файлов в папке.
Пример: count-files —total ..

Узнать количество файлов по расширениям и другие параметры

Ищу приложение для следующей задачи: нужно узнать количество файлов в определённом каталоге по расширениям. Например: mp4 — столько, flac — столько. На крайний случай можно и в консоли, но хотелось бы посмотреть список файлов с путями, возможно удалить и т.п. Также хотелось бы увидеть список файлов с наибольшим размером. Тоесть нужно приложение для просмотра статистики файлов.

lord_i — 7 Ноябрь, 2014 — 22:15

Изображение пользователя lord_i.

Если это делать по очереди для каждого расширения то вполне подойдет «выделить группу» по маске в крузадере или каком-то другом файловом менеджере. Если Вам нужна статистика одновременно для всех расширений — думаю надо скрипт писать.

kot040188 — 7 Ноябрь, 2014 — 22:36

Если это делать по очереди для каждого расширения
Эдак я в любом файловом менеджере могу сделать. Я хочу комплексно подойти к вопросу =)

human — 8 Ноябрь, 2014 — 15:05

Нашел вот это, но, к сожалению, не работает (скрипт bash). Думается, местные гуру подскажут где вкралась ошибка.

5. Как узнать сколько файлов с каким расширением находятся в папке:
find /target/folder -type f | sed -r ‘s/^.*\.([^.]+)$/\1/’ | tr “[:upper:]” “[:lower:]” | awk ‘ < ext[$1]++ >END < for (e in ext) print ext[e], e >’ | sort -nr|head -n 20
find /target/folder -type f – выбираем все файлы из заданной папки
sed -r ‘s/^.*\.([^.]+)$/\1/’ | tr “[:upper:]” “[:lower:]“ – из списка их имен формируем список всех расширений
awk ‘ < ext[$1]++ >END < for (e in ext) print ext[e], e >’ – производим подсчет всех расширений
sort -nr|head -n 20 – выводим первые двадцать позиций из отсортированного списка расширений, в порядке убывания найденных с таким определением файлов

Оригинал здесь
Также хотелось бы увидеть список файлов с наибольшим размером. Тоесть нужно приложение для просмотра статистики файлов
В Крусайдере жмем Alt+Стрелка вниз, выбираем панель статистики, там можно посмотреть крупные файлы и кучу всего прочего.

kot040188 — 8 Ноябрь, 2014 — 15:16

В Крусайдере жмем Alt+Стрелка вниз, выбираем панель статистики, там можно посмотреть крупные файлы и кучу всего прочего.
То что нужно по части размеров. Вот если бы ещё отдельно от крусайдера… Такую бы штуку по части расширений…

Найдите количество файлов с определенным расширением во всех подкаталогах

Есть ли способ найти количество файлов определенного типа без необходимости перебирать все результаты в Directory.GetFiles () или аналогичном методе? Я ищу что-то вроде этого:

Я знаю, что могу создать рекурсивную функцию для вызова Directory.GetFiles, но было бы намного чище, если бы я мог делать это без всех итераций.

РЕДАКТИРОВАТЬ: Если это невозможно сделать без рекурсии и итерации самостоятельно, как лучше всего это сделать?

7 ответов

Вам следует использовать перегрузку Directory.GetFiles (path, searchPattern, SearchOption) из Directory.GetFiles ().

Путь указывает путь, searchPattern указывает ваши подстановочные знаки (например, *, * .format), а SearchOption предоставляет возможность включать подкаталоги.

Свойство Length возвращаемого массива этого поиска предоставит правильное количество файлов для вашего конкретного шаблона поиска и параметра:

РЕДАКТИРОВАТЬ: В качестве альтернативы вы можете использовать метод Directory.EnumerateFiles

Самый удобный способ — использовать linq:

Вы можете использовать эту перегрузку GetFiles:

И этот член SearchOption:

AllDirectories — включает текущий каталог и все подкаталоги в поисковой операции. Этот вариант включает точки повторной обработки, такие как смонтированные диски и символические ссылки в поиск.

GetFiles возвращает массив строк, поэтому вы можете просто получить длину, которая представляет собой количество найденных файлов.

Искал более оптимизированную версию. Поскольку я не нашел его, я решил его закодировать и поделиться здесь:

Все решения, использующие GetFiles / GetDirectories, отчасти медленные, поскольку все эти объекты необходимо создавать. Используя перечисление, он не создает никаких временных объектов (FileInfo / DirectoryInfo).

Читать:
Как перевести doc в jpg

Похожие статьи