Używanie polecenia file do liczenia plików skryptów

3

Muszę użyć filepolecenia, aby policzyć liczbę skryptów w katalogu.

Wiem, jak uzyskać typ pliku za pomocą file:

file test
test: Bourne-Again shell script, ASCII text executable

Ale w jaki sposób miałbym filepoliczyć liczbę plików skryptów?

Osadron
źródło

Odpowiedzi:

6

Pliki skryptów są zwykle wykonywalne, przy użyciu można łatwo znaleźć wszystkie pliki wykonywalne w katalogu find. Zauważ, że te polecenia do wyszukiwania plików wykonywalnych znajdą wszystkie pliki wykonywalne, nie tylko skrypty).

find . -type f -executable

Znajduje to wszystkie pliki możliwe do wykonania w katalogu, z którego je uruchomisz. Będzie także zawierać pliki z podkatalogów, aby zignorować podkatalogi, dodaj w -maxdepth 1ten sposób:

find . -maxdepth 1 -type f -executable

To da listę wszystkich plików, a nie ich liczbę. Aby otrzymać wynik, przenieś wynik do wc -l:

find . -type f -executable | wc -l

W przypadku, gdy niektóre pliki są plikami skryptów, ale nie są wykonywalne, można użyć następujących poleceń:

  • Jeśli należy liczyć tylko pliki w bieżącym katalogu:

    file -b * | grep " script" | wc -l

  • Jeśli pliki w podkatalogach powinny zostać uwzględnione:

    find . -type f -exec file -b {} \; | grep " script" | wc -l

Przed „skryptem” w poleceniu grep dodaje się spację, aby uniknąć nieprawidłowych dopasowań (takich jak „opisowy” w plikach TIF).

Shaido
źródło
1
ale będzie to zliczać tylko skrypty, które wykonały ustawiony bit. Jeśli OP chce dołączyć prawdziwe skrypty, które nie mają bitów wykonania, musisz użyćfile
phuclv
@ LưuVĩnhPhúc To prawda. Do odpowiedzi dodałem jeszcze jedno polecenie, które zadziała w przypadku istnienia takich plików.
Shaido,
1
Nie ma potrzeby stosowania findostatniej metody, file * | grep script | wc -ldziała równie dobrze.
ksenoid
@xenoid Dobry haczyk, jednak wydaje się, że nie działa rekurencyjnie. Dodano to do odpowiedzi.
Shaido,
1
Jeśli pliki TIF znajdują się w przeszukiwanym katalogu, grepnależy go zmodyfikować, gdy filejest używany. Uruchamianie fileobrazów TIF daje wynik z „opisem” (przynajmniej w moim systemie). Spróbować file * | grep " script" | wc -l.
GreenMatt