Come posso contare il numero di file (in una directory) che contiene una determinata stringa come input in bash / sh?
Come posso contare il numero di file (in una directory) che contiene una determinata stringa come input in bash / sh?
Risposte:
grep -l "string" * | wc -l
cercherà "stringa" nel contenuto di tutti i file nella directory di lavoro e ti dirà quanti abbinati.
grep -lr "string" directory | wc -l
se non si desidera la ricerca ricorsiva, è possibile utilizzare l'opzione find with maxdepth: si find directory -maxdepth 1 -type f -exec grep -l "string" {} + | wc -l
noti che questa seconda opzione è più lenta di grep.
awk '/pattern_to_look_for/ {s+=1; nextfile;} END {print s}' *
Chiarimento: cerca il numero di file che hanno "pattern_to_look_for" nei loro contenuti e non nei loro nomi di file (come la risposta di Wag). Dalla tua domanda è difficile dire cosa stai cercando.
find . ! -name . -prune -type f
(non perdere i backtick). Questo comando elenca solo i file nella cartella.
Questo funziona in Bash con qualsiasi nome di file:
grep -lZ "$pattern" * | tr -cd '\000' | wc -c
Spiegazione:
grep
L' -Z
opzione stampa ogni risultato con un separatore ␀ byte. Questo personaggio non può far parte del nome di un file, quindi possiamo semplicemente contare il numero di separatori per ottenere il numero di file.tr
.wc
.