如何使用rm一次性删除具有相同扩展名的文件?

Ash*_*uja 2 command-line

我编译了很多C程序,每个文件都有一个.gch创建的。现在我不想要这些.gch文件,所以我决定删除它们。但是rm删除每个文件需要很多时间。那么有没有办法一次性删除具有相同扩展名的文件?

注意:我在 Ubuntu 14.04 中工作。我希望解决方案在shell或 中terminal。这个问题不是重复的,因为我只想使用rm

May*_*hux 5

轻松使用扩展“*”:

rm /path-to-directory/*.gch
Run Code Online (Sandbox Code Playgroud)

这就是所谓的文件名扩展,它使用一些称为通配符的特殊字符。

假设您有一个包含文件的目录(文件、文件 0、文件 1、文件 01)

有些人知道通配符:

问号( ? ) 是一个特殊字符,它会导致 shell 生成文件名。它匹配现有文件名称中的任何单个字符。

例子:

ls file?
Run Code Online (Sandbox Code Playgroud)

外壳扩展“文件?” 参数并在工作目录中生成一个文件列表,这些文件的名称由“file”后跟任何单个字符组成。

然后输出将是 file0 和 file1

星号 (*)执行类似于问号的功能,但匹配文件名中任意数量的字符,包括零个字符。

现在命令的输出:

ls file*
Run Code Online (Sandbox Code Playgroud)

将是文件、文件 0、文件 1 和文件 01

[ ] 特殊字符 使 shell 匹配包含括号内单个字符的文件名。

例如命令的输出:

ls file[01]*
Run Code Online (Sandbox Code Playgroud)

将是:

文件0 文件1 文件01

这只是shell扩展的简单介绍,你可以阅读更多:


Rap*_*ael 5

要一次性删除具有相同扩展名的文件,只需使用find命令即可。

find /path/to/directory -type f -iname '*.gch' -delete
Run Code Online (Sandbox Code Playgroud)
  • -type告诉find您是否正在搜索filesdirectories,此处:

    f= 文件

    d= 目录

  • iname告诉find您正在查找的文件的名称。

    注意name执行相同的操作,但iname建议这样做,因为它会忽略情况,而name不会。

  • -delete删除这些文件