List the extensions of files under a directory

I want to list the extensions of filenames in a directory, sorted and unique.

First list all the files, leaving out directories using:

find -type f .

Then use awk to get the last three characters of each line, i.e. filename.

find . -type f | awk '{ print substr( $0, length($0) - 3, 4) }'

AWK's substr function extracts four characters (last argument) of string $0 (first argument) starting at full lenth of the string minus three characters (second argument).

This will list the extensions from all files in the current directory and all directories below.

Now sort and uniq the output of the previous command for a short list all of different extensions used.

find . -type f | awk '{ print substr( $0, length($0) - 3, 4) }' | sort | uniq

Bear in mind that sort has to come before uniq.

Lastly I'll translate to lower case all the extensions, before sort and uniq, to make the filtering case insensitive:

find . -type f | awk '{ print substr( $0, length($0) - 3, 4) }' | tr '[:upper:]' '[:lower:]' | sort | uniq

Final output of the command is

.avi
.idx
.jpg
.m4v
.mkv
.mp4
.nfo
.png
.smi
.srt
.sub
.txt
.url
Go Top
>