How to delete all the files with a certain extension from a folder and all of its subfolders? [duplicate]

Solution 1:

A quick and clean solution for the command line would be

cd <dir>
find . -type f -iname \*.jpg -delete
  • . tells to start searching in the current folder.
  • -type f tells find only to look for files.
  • -iname makes the search case insensitive.
  • -delete tells find to delete/remove all files found.

CAUTION! I recommend running the command without -delete first to get a list of the files that will be removed when -delete is included in the command. This way a small typo won't delete anything you didn't intend to.

For more information on how to use find and what it can do see man find

Note that find will not produce any output when -delete is used.

Regarding the comment on multiple extensions

find . -type f \( -name \*jpg -o -name \*png \) -delete

  • ( .. ) Group expression. Needs to be escaped from the shell, hence \( .. \) in the example
  • -o logical or

So the above example will match any file which has either jpg or png at the end of it's name. More extensions can be added in the same way. Just make sure to remember -o between every -name statement, if -o is not specified find will default to -a (and) which won't work since a file can't end in both jpg and png at the same time.

Solution 2:

The easiest way (if you are using Ubuntu Desktop):

Go to your Music folder in Nautilus, press Ctrl+F and search for .jpg.

enter image description here & then delete it


You can also change the location and you can make your search more specific.

enter image description here


Updated

Be More specific after searching .jpg Clicking on green button Select File type Picture & then remove jpg from search only . dot & then reload as shown in pic below

What it does it will search Picture file like .jpg .png .gif & all other file which are in Picture Format

enter image description here

Solution 3:

This should do it

sudo rm -rf -d ~/Music/*.JPG

which will remove all .JPG files within the Music folder.

Solution 4:

Bash's shopt -s globstar can be useful here for recursive globbing:

bash-4.3$ tree
.
├── 10.jpg
└── subfolder
    ├── 5.jpg
    └── another_subfolder
        └── 15.jpg

2 directories, 3 files
bash-4.3$ shopt -s globstar
bash-4.3$ rm ./**/*.jpg
bash-4.3$ tree
.
└── subfolder
    └── another_subfolder