我曾编译过许多C
程序,每个文件都.gch
创建了一个。现在我不想要这些.gch
文件了,所以我决定删除它们。但删除每个文件会花费很多时间rm
。那么有没有办法一次性删除具有相同扩展名的文件呢?
笔记:我在 Ubuntu 14.04 中工作。我希望解决方案在shell
或中terminal
。该问题不是重复的,因为我只想使用rm
。
答案1
轻松使用扩展“*”:
rm /path-to-directory/*.gch
这就是所谓的文件名扩展,它使用一些称为通配符的特殊字符。
假设你有一个包含文件(file,file0,file1,file01)的目录
有些人知道通配符:
问号(?) 是使 shell 生成文件名的特殊字符。它与现有文件名称中的任何单个字符匹配。
例子:
ls file?
shell 扩展“文件?”参数并在工作目录中生成名称由“文件”后跟任意单个字符组成的文件列表。
那么输出将是 file0 和 file1
星号 (*)执行与问号类似的功能,但匹配文件名中的任意数量的字符,包括零个字符。
现在命令的输出:
ls file*
将是文件、file0、file1 以及 file01
[ ] 特殊字符 导致 shell 匹配包含括号内各个字符的文件名。
例如该命令的输出:
ls file[01]*
将会:
文件0 文件1 文件01
这只是对 shell 扩展的简单介绍,您可以阅读更多内容:
答案2
要一次性删除具有相同扩展名的文件,只需使用find
命令。
find /path/to/directory -type f -iname '*.gch' -delete
-type
告诉find
您是否正在搜索files
或directories
,此处:f
= 文件d
= 目录iname
告诉find
您正在寻找的文件的名称。笔记:
name
做同样的事情但是iname
被推荐因为它忽略大小写而name
没有。-delete
删除这些文件
答案3
只需在终端(shell)中输入以下命令
rm -rf /path/to/files/*.<extension>
请谨慎使用 -f 参数。它不会在删除前发出警告。
答案4
如果您使用的是 C 和 Makefile,您还可以默认创建 .PHONY 配方目标并 rm,然后添加从干净的源目录中删除的副产品“cruft”文件。您仍然使用通配符 * 标记。
make clean
例如
.PHONY clean
clean:
rm -f *.gch *.o *.temp *.log
那么你在消除垃圾方面的生产力就成倍提高了。