Вопрос: Получите все расширения и их количество файлов в каталоге


Получение всех расширений для каталога: легко. Получение количества файлов для определенного расширения: легко.

Но все ссылки на файлы и их количество файлов ссылаются на меня.

например.

+ dir
 + abc.txt
 + def.txt
 + abc.pdf
 * def.pov

должен возвращать что-то вроде:

.txt 2
.pdf 1
.pov 1

Целью этого упражнения является то, что я хочу узнать, какое расширение файла популярно в определенном каталоге.

заранее спасибо


14
2017-09-22 05:06


Источник




Ответы:


/var/cache$ sudo find ./ -type f | grep -E ".*\.[a-zA-Z0-9]*$" | sed -e 's/.*\(\.[a-zA-Z0-9]*\)$/\1/' | sort | uniq -c | sort -n
      1 .6
      1 .cache
      1 .noconf
      1 .php
      1 .sl
      2 .bin
      2 .el
      2 .tdb
      4 .baseA
      4 .baseB
      4 .dat
      4 .DB
     27 .db
    221 .deb

Вот объяснение:

find ./ -type f

найти только файл, а не каталог

grep -E ".*\.[a-zA-Z0-9]*$"

файл фильтра с расширением

sed -e 's/.*\(\.[a-zA-Z0-9]*\)$/\1/'

удалить путь и имя файла, сохранить только расширение

sort | uniq -c | sort -n

сортировать, uniq и сортировать


43
2017-09-22 05:13



хороший. идеально! люблю. благодаря - denormalizer
Вы можете заставить ваше регулярное выражение разрешить больше символов в расширении и исключить grep делая это: sed -ne '/\.[^./]*$/s/.*\(\.[^.]*\)$/\1/p' - Dennis Williamson
Деннис, заменив grep и sed вашим sed, возвращает следующую ошибку: sed: -e выражение # 1, char 30: неверная ссылка \ 1 на `s 'команда RHS - denormalizer