Нужно написать скрипт на bash, считающий количество скриптов каждого вида в заданной директории. Разновидность файла определяется по сигнатуре в первой строке (#!/usr/bin/perl, #!/bin/bash etc.)
Подозреваю, что это должно делаться в одну строчку, что-то вроде цепочки команд ls | grep | awk, но дальше не могу сообразить.
Re: Посчитать количество файлов каждого вида в каталоге
Здравствуйте, alien3128, Вы писали:
A>Нужно написать скрипт на bash, считающий количество скриптов каждого вида в заданной директории. Разновидность файла определяется по сигнатуре в первой строке (#!/usr/bin/perl, #!/bin/bash etc.)
perl="perl"; sh="sh"; bash="bash"; PERL=0; BASH=0; SH=0; DIR="/usr/bin"; MAS=`ls $DIR`; for file in $MAS; do if [ -f $DIR/$file ]; then tmp=`sed -n '{s/^#!.*\///g p}' $DIR/$file`; case $tmp in $sh) let SH=$SH+1 ;; $bash) let BASH=$BASH+1;; $perl) let PERL=$PERL+1;; esac;fi; done; echo "RES SH=$SH, BASH=$BASH, PERL=$PERL"
Re: Посчитать количество файлов каждого вида в каталоге
Здравствуйте, alien3128, Вы писали:
a> Нужно написать скрипт на bash, считающий количество скриптов каждого вида в заданной директории. Разновидность файла определяется по сигнатуре в первой строке (#!/usr/bin/perl, #!/bin/bash etc.) a> Подозреваю, что это должно делаться в одну строчку, что-то вроде цепочки команд ls | grep | awk, но дальше не могу сообразить.
Если у всех файлов есть данный маркер, то грубое решение:
Здравствуйте, Anton Batenev, Вы писали:
AB>Здравствуйте, alien3128, Вы писали:
a>> Нужно написать скрипт на bash, считающий количество скриптов каждого вида в заданной директории. Разновидность файла определяется по сигнатуре в первой строке (#!/usr/bin/perl, #!/bin/bash etc.) a>> Подозреваю, что это должно делаться в одну строчку, что-то вроде цепочки команд ls | grep | awk, но дальше не могу сообразить.
AB>Если у всех файлов есть данный маркер, то грубое решение:
AB>
Спасибо. В первом приближении вроде то, что нужно. Но. У perl скриптов, например, могут быть разные ключи (или не быть вообще).
А если еще считать бинарники (т.е файлы с сигнатурой ELF) ?
Re[3]: Посчитать количество файлов каждого вида в каталоге
Здравствуйте, alien3128, Вы писали:
a> AB>Если у всех файлов есть данный маркер, то грубое решение: a> AB>$ find . -maxdepth 1 -type f -print0 | xargs -r -0 -I {} head -n 1 {} | sort | uniq -c | sort -n a> Спасибо. В первом приближении вроде то, что нужно. Но. У perl скриптов, например, могут быть разные ключи (или не быть вообще).
Можно оставить только первую левую часть (если имя скрипта не имеет пробелов):
Здравствуйте, alien3128, Вы писали:
A>А если еще считать бинарники (т.е файлы с сигнатурой ELF) ?
Есть утилита file, которая по списку файлов возвращает их тип: картинка, видео, исполняемый модуль, библиотека, скрипт и на каком языке, и так далее — этим куда удобнее пользоваться чем head -n1.
A>В первом приближении вроде то, что нужно. Но. У perl скриптов, например, могут быть разные ключи (или не быть вообще).
Это далеко не единственная проблема. Например shebang #!/usr/bin/env perl тоже задаёт интерпретатор перла (да и такая форма записи встречается часто, так как предпочтительнее указания полного пути, которого может и не существовать на другом компьютере). А есть ещё и символьные ссылки, например.
В общем, тут тебе самому нужно решать, что считать одним и тем же, а что — нет.
Например, если указан интерпретатор python, то это то же самое, что и python2? А python2.5? А python3? С одной стороны всё это описывается словом "питон", с другой стороны различия в скриптах велики. Никакая утилита за тебя не решит, важны эти отличия для тебя или нет. Аналогично и с параметрами для интерпретатора.