0

我刚刚收到一个包含大约 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”等。

我过去能够重命名扩展名,但是我的命令行功能很弱,而且我正在努力找出可重用的东西(我需要做几个次,因为我正在为此项目编写连续迁移脚本)。

编辑:在这方面做了更多工作后,我发现了一些我必须解决的 rm 和 xargs 奇怪的限制。我基本上改编了下面接受的答案并最终得到:

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

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

4

2 回答 2

2

一个(相对稳健的)选项是运行

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

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

 rm *_web.* *_thumb.*

警告:这也会删除名为 my_web.file.jpg 之类的文件,因此,如果您想安全起见,则必须添加所有扩展名而不是依赖 .* 如果您知道您的扩展名总是在运行要长 3 个字符,您可以使用 *_thumb.???

于 2011-07-27T06:07:50.430 回答
0

我面前没有 MAC 或 UNIX 终端,但我想像下面这样的东西可能会起作用

rm *_web.jpg
rm *_web.jpg
rm *_thumb.gif
于 2011-07-27T06:10:29.497 回答