58

I changed my wordpress theme. The older one created so much images on server. My new theme doesnt need them, so I want to remove all. How can I do that?

For example:
Default image: 12_angry_men_lone_holdout.jpg

I want to delete:

12_angry_men_lone_holdout-290x166.jpg
12_angry_men_lone_holdout-700x300.jpg 
12_angry_men_lone_holdout-50x50.jpg

Using Digitalocean, Ubuntu 13.10.

3
  • on a terminal type man rm to see the manual page of the rm command.
    – hmayag
    Apr 5, 2014 at 22:38
  • possible duplicate of How to search and delete files who contain specific string in name
    – A.B.
    May 18, 2015 at 13:26
  • Looks like these images are the automatically created thumbnails from images uploaded to your WorldPress media library. If so, then don't delete those files in terminal on the server. Open your WordPress admin page, open 'Settings' > 'Media'. Set desired thumbnail image sizes there. Then install the plugin Regenerate Thumbnails and re-create all thumbnails (may take a few minutes, depending of the amount of images in your media library).
    – Bob
    Feb 9, 2018 at 19:39

5 Answers 5

77

Use find to recursively find and delete files with "text" in their names:

find -type f -name '*text*' -delete

You might also want run find -type f -name '*text*' (without the -delete) before that to make sure you won't delete any files you didn't intend to delete.


In fact, you can place wildcards anywhere in the search string, so -name '12_angry_men_lone_holdout-*.jpg' might be more suitable in your case.

5
  • 1
    Is that no need to represent file path Apr 6, 2014 at 2:03
  • @AvinashRaj If the first parameter isn't a path, find searches the current working directory.
    – n.st
    Apr 6, 2014 at 10:30
  • Somebody put . just after find for searching inside current working directory. Apr 6, 2014 at 11:16
  • 1
    @AvinashRaj That would be redundant. As per man find: If no paths are given, the current directory is used.
    – n.st
    Apr 6, 2014 at 15:10
  • @AvinashRaj Turns out the POSIX specification for find actually does require a path. Defaulting to . is a modification added by GNU find. If this were Unix & Linux, I'd add that to my answer, but since Ubuntu comes with GNU find by default, I'd rather not confuse newcomers more than necessary. ;)
    – n.st
    Nov 15, 2016 at 5:50
54

If they are in the same folder use * wildcard to achieve that:

rm *text*

Where text is string that filename contains.

5
  • 2
    Actually it's not one directory but I can do that by one by for now. Thank you! Apr 5, 2014 at 22:41
  • it helps, thank you :D
    – Spring
    Jul 27, 2020 at 11:27
  • I kept getting permission denied with this command, even using sudo. the find command below did work though.
    – TetraDev
    Oct 26, 2020 at 17:34
  • Did the Trick, Thank you! Dec 24, 2021 at 17:45
  • You can do rm **/*text* to delete filenames containing text in all subdirectories.
    – AlienKevin
    Jan 26, 2023 at 15:58
3
find . -type f -name '*[0-9]x[0-9]*' -delete

Run this in the parent directory. This is going to delete all files that have a digit followed by an 'x' character followed by another digit in their name.

Still be careful, this might delete original files too, if their name contains the above pattern (unlikely). Run it first without '-delete' to see if you have any files that have such a name. If that's the case, you'll just need to find a more restrictive pattern.

1

Try this:

rm -rf 12_angry_men_lone_holdout-*

This will keep 12_angry_men_lone_holdout.jpg and remove files with dimensions (290x166)

And please remember

rm -rf 12_angry_men_lone_holdout.*

will delete the default file too, that you needed.

1

I found out, that if you want to delete a directory which starts with a specific letter, you can use the next command:

Let's say you have created the next folders:

  • Baka
  • baka
  • Aka
rm -rf B* b*

This will delete all directories starting with those letters (uppercase B and lowercase b).

After executing this command, you will only keep the folder named Aka. You can check it using ls to list the remaining folders in the current directory.

1
  • Just remember to add -rf to your command, or you will end with empty directories. rm B* b* -r removes all the contents inside every single directory starting with B and b. But if you wish to remove the whole directory and its contents, you should use the -f flag to instruct rm to also "force" delete the directory. Please see man rm or rm --help for further information. Jun 2, 2020 at 17:02

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .