删除所有文件名包含特定字符串的文件?

我更换了我的WordPress主题。旧的主题在服务器上创建了很多图像。我的新主题不需要它们,所以我想删除所有图像。我该怎么做?

例如:
默认图片:12_angry_men_lone_holdout.jpg

我想删除:

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

使用Digitalocean,Ubuntu 13.10。

在终端上输入man rm可以查看rm命令的手册页。 - hmayag
看起来这些图片是从上传到你的WordPress媒体库的图片自动生成的缩略图。如果是这样的话,请不要在服务器终端上删除这些文件。打开你的WordPress管理页面,点击“设置”>“媒体”。在那里设置所需的缩略图尺寸。然后安装插件Regenerate Thumbnails并重新创建所有缩略图(根据媒体库中的图片数量可能需要几分钟)。 - Bob
5个回答

使用find命令递归查找并删除文件名中包含"text"的文件:
find -type f -name '*text*' -delete

你可能还想在那之前运行一下find -type f -name '*text*'(不带-delete),以确保你不会删除任何你不打算删除的文件。
实际上,你可以在搜索字符串的任何位置放置通配符,所以-name '12_angry_men_lone_holdout-*.jpg'可能更适合你的情况。

1不需要表示文件路径吗? - Avinash Raj
如果第一个参数不是路径,find命令会在当前工作目录中进行搜索。 - n.st
有人在当前工作目录中的搜索操作find后面加了一个点。 - Avinash Raj
1@AvinashRaj 这将是多余的。根据 man find 的说明:如果没有指定路径,则使用当前目录 - n.st
原来P OSIX对于find的规范实际上确实需要路径。默认使用.是GNU find添加的一个修改。如果这是[Unix.SE],我会将此添加到我的答案中,但由于Ubuntu默认带有GNU find,我不想给新手带来更多困惑。;) - n.st

如果它们在同一个文件夹中,可以使用*通配符来实现这一点。
rm *text*

其中text是一个字符串,它包含了文件名。


2实际上不只是一个目录,但是现在我可以逐个处理。谢谢! - Ibrahim Mumcu
谢谢你的帮助!:D - Spring
我用这个命令一直得到权限被拒绝的错误,即使使用'sudo'也是如此。然而下面的'find'命令确实起作用了。 - TetraDev
解决了问题,谢谢! - Code Cooker
你可以使用rm **/*text*命令来删除所有子目录中包含text的文件名。 - AlienKevin

find . -type f -name '*[0-9]x[0-9]*' -delete

在父目录下运行此命令。 这将删除所有文件名中包含一个数字,然后是字符'x',再后跟另一个数字的文件。
仍要小心,如果原始文件名包含上述模式(不太可能),这可能会删除原文件。先不带'-delete'选项运行一次,看看是否有这样的文件。如果有的话,您只需找到一个更具限制性的模式即可。

试试这个:

rm -rf 12_angry_men_lone_holdout-*

这将保留 12_angry_men_lone_holdout.jpg 并删除尺寸为 (290x166) 的文件。

请记住

rm -rf 12_angry_men_lone_holdout.*

会连同你需要的默认文件一起删除。

我发现,如果你想删除以特定字母开头的目录,可以使用以下命令:
假设你创建了以下文件夹:
- Baka - baka - Aka
rm -rf B* b*

这将删除以大写字母B和小写字母b开头的所有目录。
执行此命令后,您只会保留名为"Aka"的文件夹。您可以使用"ls"命令列出当前目录中剩余的文件夹进行确认。

请记住,在命令中加上 -rf,否则你最终会得到空目录。rm B* b* -r 会删除以 Bb 开头的每个单独目录内的所有内容。但是如果你想要删除整个目录及其内容,你应该使用 -f 标志来指示 rm 强制删除目录。请参阅 man rmrm --help 获取更多信息。 - Geppettvs D'Constanzo