Отримайте всі розширення та їх відповідний кількість файлів у каталозі


14

Отримання всіх розширень для каталогу: просто. Отримання кількості файлів для конкретного розширення: просто.

Але я натякаю на отримання всіх розширень файлів та їх відповідних підрахунків.

напр.

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

повинен повернути щось на кшталт:

.txt 2
.pdf 1
.pov 1

Мета цієї вправи полягає в тому, щоб я хотів з’ясувати, яке розширення файлу популярне в певному каталозі.

Спасибі заздалегідь

Відповіді:


47
/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 і сортувати


Ви можете змусити ваш регулярний вираз дозволити більше символів у розширенні та усунути grep, виконавши це:sed -ne '/\.[^./]*$/s/.*\(\.[^.]*\)$/\1/p'
Призупинено до подальшого повідомлення.

Денніс, замінивши grep і sed своїм sed, повертає таку помилку: sed: -e вираз №1, char 30: невірне посилання \ 1 на команду RHS команди `s '
денормалізатор

2

Оскільки ви використовуєте Linux (gnu grep), це час для використання Perl RE (PCRE) -Pта -oопції grep . Приймаючи відповідь @ bindbn як чудового кандидата:

find . -type f | grep -Po '\.([\w\d])*$' | sort | uniq -c | sort -n
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.