Policz całkowitą liczbę plików w określonym katalogu z określonym rozszerzeniem

23

Chcę policzyć całkowitą liczbę plików w określonym katalogu, który kończy się rozszerzeniem ".mp4".

Otrzymuję następujące polecenie:

ls -F |grep -v / | wc -l

Zlicza wszystkie pliki w określonym katalogu, ale ja chcę liczbę plików, które kończą się rozszerzeniem .mp4.

Czy istnieje jakieś polecenie Ubuntu?

    
zadawane Prakash V Holkar 24.04.2014, 17:48
źródło

9 odpowiedzi

11

Tutaj możesz to zrobić

ls -lR /path/to/dir/*.jpg | wc -l

Daje to liczbę

    
odpowiedział Shrikant1712 24.04.2014, 18:03
źródło
34

Niestety ten łagodny problem jest trudny do rozwiązania w sposób, który obsługuje wszystkie nazwy plików i jest przenośny. To jest bezpieczne (obsługuje ukryte pliki, ścieżki zawierające spacje, myślniki, a nawet znaki nowej linii) < Zgodność> i zgodność z POSIX :

find /path/to/directory -mindepth 1 -type f -name "*.mp4" -printf x | wc -c

Jeśli nie chcesz, aby było rekurencyjne, po prostu dodaj -maxdepth 1 .

Nie powinieneś parsować ls danych wyjściowych.

Test:

$ cd -- "$(mktemp -d)"
$ touch -- -foo.mp4 .bar.mp4 .bat.mp4 'baz.mp4
> ban.mp4'
$ find . -mindepth 1 -type f -name "*.mp4" -exec printf x \; | wc -c
4

Porównaj z zaakceptowaną odpowiedzią :

$ ls -lR ./*.mp4 | wc -l
3

Lub inne sugestie:

$ find . -name "*.mp4" | wc -l
5
$ ls -1 *.mp4 | wc -l
ls: invalid option -- '.'
Try 'ls --help' for more information.
0
$ find . -name "*.mp4" | wc -c # Answer fixed at a later time
51
$ find . -name "*.mp4" | wc -l
5
$ find . | grep -i ".mp4$" | wc -l
5
$ ls . | grep ".mp4$" | wc -l
3
    
odpowiedział l0b0 24.04.2014, 17:52
źródło
7

Ten odnajduje, sortuje i wyświetla wszystkie pliki według rozszerzenia w następującej kolejności:

find . -type f | sed 's/.*\.//' | sort | uniq -c
    
odpowiedział squozen 22.03.2016, 16:23
źródło
3

Myślę, że to bardzo proste, jak wykonywanie poniższych poleceń.

$ find . -name "*.mp4" | wc -l
8

lub

$ find . | grep -i ".mp4$" | wc -l
8

Myślę, że powyższe polecenia obliczają liczbę plików i nazw katalogów *.mp4

więc proponuję użyć opcji -type f jako parametr find jak poniżej.

$ find . -name "*.mp4" -type f | wc -l
8

Ponadto ls -lR może być użyty jako find .

    
odpowiedział xiaodongjie 24.04.2014, 17:57
źródło
0

Możesz użyć ls -1 *.mp4 | wc -l .

Spowoduje to wyświetlenie wszystkich plików kończących się na .mp4 , wydrukowanie każdego pliku w nowym wierszu ( ls -1 *.mp4 ), wyprowadzenie wyniku do wc , który zliczy liczbę nowych linii przy użyciu flagi -l .

    
odpowiedział Louis Matthijssen 24.04.2014, 17:55
źródło
0

To powinno dać ci listę plików z .mp4

ls /path/to/directory | grep ".mp4$"

W połączeniu z wc -l da ci liczbę

ls /path/to/directory | grep ".mp4$" | wc -l

jeśli wyszukiwanie ma zawierać podkatalogi

ls -lR /path/to/directory | grep ".mp4$" | wc -l
    
odpowiedział Back.Slash 24.04.2014, 18:13
źródło
0

ls | grep --count \.csv$

Zastąp (.csv żądanym rozszerzeniem)

Wyjaśnienie: Myślę, że prosty schemat polega na pobraniu listy plików i policzeniu rozszerzenia za pomocą grep. \. , aby dopasować . i $ , aby dopasować rozszerzenie na końcu wiersza. Działa, ponieważ gdy wyjście ls jest wyprowadzone, jedna nazwa pliku jest wysyłana na linię, którą możesz zweryfikować, uruchamiając:

ls | cat

    
odpowiedział Mohsin Raza 22.06.2018, 20:51
źródło
0

W bashu jedno zimne miejsce na używanie tablic z globem:

$ files=( *.mp4  )
$ echo ${#files[@]}
30
    
odpowiedział Sergiy Kolodyazhnyy 22.06.2018, 22:30
źródło
-3

Najpierw przejdź do żądanego katalogu. Na przykład:

cd ~/Videos

Następnie:

ls -la | grep ".mp4" | wc -l

Ta lista zawiera zawartość twojego katalogu, w tym ukryte pliki, z jednym plikiem na wiersz. Przekazuje wynik do grep, który będzie wyświetlał tylko elementy zawierające rozszerzenie .mp4. Ta lista jest następnie przekazywana do "liczby słów", aby policzyć linie.

Wynik wyprowadzi liczbę pasujących wierszy, która będzie odpowiadała liczbie plików .mp4, które masz w tym katalogu.

    
odpowiedział K. Darien Freeheart 24.04.2014, 17:53
źródło

Przeczytaj inne pytania na temat tagów