How to Delete Files with a Specific Extension in all Subdirectories Recursively


I was trying to recursively delete all my *.css files recently because I accidentally ran a SASS to CSS compiler, which bloated my repository.

I tried using rm -r, since I knew the -r flag recursively traversed the directory tree, but it has no functionality to match regex patterns for files (only directories).

-r, -R, --recursive
removes directories and their contents recursively

In order to recursively delete files, we want to use find.

find . -type f -name '*.css' -delete

We are searching for all files (-type f) in the current and child directories (find .) that match the given pattern (*.css).

Then we’re delete those files (-delete).

find . -type f -name '*.css' -exec rm {} +

Here, we’re doing the same search, but instead of using -delete, we’re running -exec rm {} +.

The curly braces {} is a placeholder for the file names and paths.

The plus sign + allows us to handle multiple files simultaneously.