【问题标题】:How to delete all files with certain suffix before file extension如何删除文件扩展名前具有特定后缀的所有文件
【发布时间】:2011-10-13 23:23:54
【问题描述】:

我刚刚收到了一个目录,里面有大约 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 个文件 - 在网络上推送文件方面节省了很多!

【问题讨论】:

    标签: command-line rm


    【解决方案1】:

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

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

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

     rm *_web.* *_thumb.*
    

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

    【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-25
      • 1970-01-01
      • 1970-01-01
      • 2016-01-06
      • 2015-02-01
      • 2022-11-15
      • 1970-01-01
      • 2015-06-07
      相关资源
      最近更新 更多