Conta il numero totale di file in una particolare directory con estensione specifica

23

Voglio contare il numero totale di file in una particolare directory che termina con l'estensione ".mp4".

Ricevo il seguente comando:

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

Conta tutti i file in una particolare directory, ma voglio il conteggio dei file che terminano con estensione .mp4.

Esiste un comando di Ubuntu per questo?

    
posta Prakash V Holkar 24.04.2014 - 17:48
fonte

9 risposte

11

Qui puoi fare in questo modo

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

Questo ti dà il conto

    
risposta data Shrikant1712 24.04.2014 - 18:03
fonte
34

Sfortunatamente questo problema benigno è difficile da risolvere in un modo che supporta tutti i nomi di file ed è portatile. Questo è sicuro (gestisce file nascosti, percorsi contenenti spazi, trattini e persino linee nuove) < strike> e POSIX compatibili :

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

Se non vuoi che sia ricorsivo, aggiungi semplicemente -maxdepth 1 .

Non devi analizzare l'output ls .

Prova:

$ 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

Confronta con la risposta accettata :

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

O altri suggerimenti:

$ 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
    
risposta data l0b0 24.04.2014 - 17:52
fonte
7

Questo trova, ordina ed elenca tutti i file per estensione nell'ordine:

find . -type f | sed 's/.*\.//' | sort | uniq -c
    
risposta data squozen 22.03.2016 - 16:23
fonte
3

Penso che sia molto semplice come i seguenti comandi.

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

o

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

Penso che i comandi precedenti calcolino il conteggio dei nomi di file e directory *.mp4

quindi ti suggerisco di utilizzare l'opzione -type f come parametro find come segue.

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

Inoltre, ls -lR può essere utilizzato come find .

    
risposta data xiaodongjie 24.04.2014 - 17:57
fonte
1

Potresti usare ls -1 *.mp4 | wc -l .

Questo elencherà tutti i file che finiscono su .mp4 , stampando ogni file su una nuova riga ( ls -1 *.mp4 ), reindirizza l'output a wc che conterrà il numero di nuove righe usando il flag -l .

    
risposta data Louis Matthijssen 24.04.2014 - 17:55
fonte
0

Questo dovrebbe darti la lista dei file con .mp4

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

Se combinato con wc -l ti darà il conteggio

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

se vuoi che la ricerca includa sottodirectory

ls -lR /path/to/directory | grep ".mp4$" | wc -l
    
risposta data Back.Slash 24.04.2014 - 18:13
fonte
0

ls | grep --count \.csv$

Sostituisci (.csv con l'estensione che vuoi)

Spiegazione: Penso che uno schema semplice sia quello di recuperare l'elenco di file e contare l'estensione con grep. \. per abbinare . e $ per abbinare l'estensione alla fine della riga. Funziona perché quando viene eseguito il piping dell'output di ls, viene inviato un nome file per riga, che puoi verificare eseguendo:

ls | cat

    
risposta data Mohsin Raza 22.06.2018 - 20:51
fonte
0

In bash, un ricorso freddo all'utilizzo di matrici con glob:

$ files=( *.mp4  )
$ echo ${#files[@]}
30
    
risposta data Sergiy Kolodyazhnyy 22.06.2018 - 22:30
fonte
-3

Per prima cosa, passa alla directory che vuoi. Ad esempio:

cd ~/Videos

Quindi:

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

Questo elenca i contenuti della tua directory, inclusi i file nascosti, con un file per riga. Passa il risultato a grep che mostrerà solo gli elementi contenenti l'estensione .mp4. Questo elenco viene quindi passato a "conteggio parole" per contare le linee.

Il risultato produrrà il numero di righe corrispondenti, che corrisponderà al numero di file .mp4 presenti in quella directory.

    
risposta data K. Darien Freeheart 24.04.2014 - 17:53
fonte

Leggi altre domande sui tag