How to Get the Count of Files with each File Extension in Linux


One interesting command I learned lists all file extensions in a directory and counts them.

Let’s see how it works.

List All File Extensions

find . -type f | grep -i -E -o "\.\w*$" | sort -su

find . -type f searches for all files in the current and subdirectories.

| pipes the output from the previous command to the next command.

-i forces grep to perform case insensitive matching, so it will find .jpeg and .JPEG.

-E allows us to use extended regular expressions. In our case, it allows us to use {} the way we do here. Alternatively, we could use egrep and remove this flag.

-o forces grep to print only the matching portion of the regular expression, instead of the entire line like it defaults to.

\. matches a single literal period ..

\w* matches any number of word characters (from 0 to infinity).

$ ensures that the expression occurs at the end of the line.

sort -su performs a stable, unique sorting of the previous output.

.css
.gitkeep
.html
.jpg
.js
.md
.png
.sample
.sh
.svg
.toml
.txt
.xml
.yaml

List All File Extensions with Count

find . -type f | grep -i -E -o "\.\w*$" | sort | uniq -c

sort | uniq is the same as sort -u, but allows us to use the uniq command’s -c flag.

      8 .css
      2 .gitkeep
     62 .html
      2 .jpg
      5 .js
     37 .md
    226 .png
     12 .sample
      1 .sh
      4 .svg
      1 .toml
      1 .txt
     10 .xml
      1 .yaml