如何在文件扩展名之前删除具有特定后缀的所有文件

时间:2011-07-27 05:56:41

标签: command-line rm

我刚刚递交了一个包含40,000多张图像的目录,该目录包含每个文件的三个版本,这使得必须在服务器之间进行传输。

我正在寻找一种方法,使用bash(OSX终端)查找和删除(rm)所有文件,例如,文件名末尾的_web或_thumb,就在.jpg(或.gif)之前,或.png,或.bmp等)扩展。

因此,要清楚,我有以下文件:

1.jpg
1_web.jpg
1_thumb.jpg
2.gif
2_web.gif
2_thumb.gif
etc.

我只想要“1.jpg”,“2.gif”等等。

我以前能够重命名扩展程序,但是我的命令行fu非常弱,而且我最终试图找出可重用的东西(我需要做的)这几次,因为我正在为这个项目开发一个连续的迁移脚本。)

编辑:经过多一点工作后,我发现了rm和xargs的一些奇怪限制,我必须解决这个问题。我基本上调整了下面接受的答案,结果是:

$ find . -name '*_thumb.*' -print0 | xargs -0 rm -f
$ find . -name '*_web.*' -print0 | xargs -0 rm -f

现在我已经减少了大约10,000个文件 - 在网络上推送文件方面节省了很多!

2 个答案:

答案 0 :(得分:2)

一个(相对强大的)选项是运行

find . -iregex ".*\(_web\|_thumb\)\.\(jpg\|png\|bmp\)" -delete

假设您在目录中没有除图像文件以外的任何内容,则运行另一个(更简单的)选项

 rm *_web.* *_thumb.*

警告:这也将删除名为my_web.file.jpg的文件,因此如果您想要安全玩游戏,则必须添加所有扩展名而不是依赖。* 如果您知道您的扩展名总是3个字符,那么您可以使用类似* _thumb的内容。???

答案 1 :(得分:0)

我面前没有MAC或UNIX终端,但我想像以下内容可能会有效

rm *_web.jpg
rm *_web.jpg
rm *_thumb.gif