How to count number of files in directory (Bash)


This recipe based on ls output format. When you list a directory, you see file types in the first column. “-” – for a plain file, “d” is for a directory. You can learn more about files in Unix in this article: “File and directory permissions in Linux / FreeBSD / MasOS“.

Also we use -c flag of the grep util. It counts all matches. ^ symbol in matching means “start of the line”.

Count number of files (not symbolic links, not char/block dev, etc):

ls -l . | grep -c '^-'

Bonus: count number of subdirectories in directory

ls -l . | grep -c '^d'

I think you got the idea.