Ищу приложение для следующей задачи: нужно узнать количество файлов в определённом каталоге по расширениям. Например: mp4 - столько, flac - столько. На крайний случай можно и в консоли, но хотелось бы посмотреть список файлов с путями, возможно удалить и т.п. Также хотелось бы увидеть список файлов с наибольшим размером. Тоесть нужно приложение для просмотра статистики файлов.
Если это делать по очереди для каждого расширения то вполне подойдет "выделить группу" по маске в крузадере или каком-то другом файловом менеджере. Если Вам нужна статистика одновременно для всех расширений - думаю надо скрипт писать.
Эдак я в любом файловом менеджере могу сделать. Я хочу комплексно подойти к вопросу =)
Нашел вот это, но, к сожалению, не работает (скрипт 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+Стрелка вниз, выбираем панель статистики, там можно посмотреть крупные файлы и кучу всего прочего.
То что нужно по части размеров. Вот если бы ещё отдельно от крусайдера… Такую бы штуку по части расширений…
в нужной директории выполняем
du -ah | sort -hr
ошибка в кавычках вот так работает:
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': Нет такого файла или каталога
чяднт?
разобрался)
а как запилить, чтобы значение "/target/folder" бралось из указанного (script /home/user/downloads например)?
find "$1" -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
"$1" - первый параметр скрипта
спасибо, то что нужно!
з.ы. порядок сортировки почему-то не работает:
10 chm
3 fb2
5 pdf
2 djvu
9 doc
2 url
1 directory
3 txt
скрипт покажи
точно, какой-то видать не тот был, взял из последнего сообщения - все ок!
Пока я был занят, такое бурное обсуждение было =) Нельзя ли объяснить как для самых маленьких, как этим скриптом пользоваться =)
1. Создаем файл, например c именем katz =)
2. Вставляем туда содержимое
find "${PWD#}" -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
3. Отправляем его в /usr/bin
sudo cp katz /usr/bin
4. Теперь в Dolphin'е переходим в нужную папку, включаем консоль (F4), пишем katz и получаем примерно следующее:
user@komputer:~/Downloads$ katz
8986 png
1475 svg
74 xpm
37 directory
25 html
20 xml
18 tix
18 six
18 rix
18 pack
18 iix
18 cix
17 in
16 c
11 css
10 theme
9 m4
9 h
9 am
8 ttf
показывает только 20 первых строк
из-за команды: "head -n 20"
если её убрать покажет всё, ну или замени 20 на свой параметр
Согласен, лучше его совсем убрать.Тогда куча лишнего, файл без расширения каждый отдельно высвечивается.а если убрать и запустить в домашней папке получим огромный список
файлов без расширений :(((
ток что попробовал
У меня файлов без расширений нет…
эт хорошо а то можно в скрипт вставить типа фильтра
на расширение: egrep '^\./.+\..+$'
ну или что-то другое
То-то я думаю что не все расширения показывает…
А прямую черту перед командой тоже убирать?
да
Убрал - появились странные расширения типа "su/a_002". Как это понять?
это не расширения а просто имена файлов
Разве / может быть в названии файла?
Понял что это. su - конец названия папки после точки. А a_002 - файл. Видимо алгоритм так своеобразно ищет точки в путях к файлам…
в названии нет в пути к файлу да
всё таки хотелось бы узнать, что именно мы будем считать расширением файла а что нет?
какое количество чисел,букв или букв и чисел после точки
исключая слеши?
з.ы хочу немножко скрипт изменить.
Сейчас алгоритм ищет точку в пути к файлу. Я думаю это не нужно. Если нет точки в названии, пусть пишет название в список как расширение и всё. А то получается такая фигня su/a_002
файлов без точки в названии тоже огромное количество.
И что? Это должно напугать? У меня всего пару и те надо удалить, потому как мусор…
А у меня не пара и не мусор :)
Надо определится: делаем скрипт мне, вам или универсальный =)
тогда предлагаю так:
find "${PWD#}" -type f | egrep '^.+[^/]\.[a-zA-Z0-9]{1,}$' | sed -r 's/^.*\.([^.]+)$/\1/' | tr “[:upper:]” “[:lower:]” | awk '{ ext[$1]++ } END { for (e in ext) print ext[e], e }'| sort -nr
по желанию можно изменить [a-zA-Z0-9]{1,}
тсть диапазон букв чисел , и длинну расширения
от a до z, и большие A до Z, от 0 до 9, длинна 1 и больше
пример:
[a-z]{1,5} ; маленькие буквы, длинна не больше 5 и т.д
немножко не туда написал :)
Ниже human написал:
Я думаю это вас устроит. А все файлы без расширений я уже нашёл в DC.
вот так ещё меньше:
find "${PWD#}" -type f | egrep '^.+[^/]\.[[:alnum:]]{1,}$' | sed -r 's/^.*\.([^.]+)$/\1/' | tr “[:upper:]” “[:lower:]” | awk '{ ext[$1]++ } END { for (e in ext) print ext[e], e }' | sort -nr
Так наверное будет лучше, все файлы без расширений можно и в файловом менеджере найти.
Добавлю что нужно сделать скрипт исполняемым, иначе не будет фурычить =)
ах, да
2.5
делаем скрип исполняемым
chmod +x katz
Вторая часть -- ncdu (консольное).
Ыщё один вариант:
find $folder -type f | grep -oE '\.[^./]+$' | sort | uniq -ci | sort -nr
Отправить комментарий