如何删除/删除可执行文件(也称为无扩展名的文件)

时间:2009-05-13 06:58:50

标签: c++ linux unix file

我有一个目录src /包含许多.cc文件及其二进制文件。 例如:

src/
  |_ foo.cc
  |_ bar.cc
  |_ qux.cc
  |_ thehead.hh
  |_ foo  (executable/binary)
  |_ bar  (executable/binary)
  |_ qux  (executable/binary)
  |_ makefile

实际上有很多.cc和可执行文件。

我需要以全局方式删除这些二进制文件而不必列出 所有文件。是否有快速而紧凑的方式来做到这一点?

我试过了:

$ rm *

但它会删除所有文件,包括.cc和.hh文件。

我知道这个命令:

$ rm foo bar qux ....

但是我们仍然需要逐个列出所有文件。

10 个答案:

答案 0 :(得分:17)

你走了:

ls | grep -v "\." | xargs rm

grep -v说“只允许不包含点的文件名”,xargs rm说“然后将文件名列表传递给rm”。

答案 1 :(得分:17)

你可以运行

find . -perm +100 -type f -delete

答案 2 :(得分:11)

使用find。你想要的是这个:

find . -type f -executable -exec rm '{}' \;

也可以在没有扩展名的情况下删除所有内容:

find . -type f -not -iname "*.*" -exec rm '{}' \;

前一个选项不会删除Makefile,因此是首选。我认为kcwu's answer显示了一种使用-delete选项改进上述内容的好方法:

find . -type f -executable -delete
find . -type f -not -iname "*.*" -delete

编辑:我在Ubuntu 8.10下使用GNU findutils find,版本4.4.0。我不知道-executable开关是如此罕见。

答案 3 :(得分:5)

我宁愿在Makefile中找到 clean 目标。很可能它已经包含了这些二进制文件的列表,因此添加 clean 目标不需要太多努力。

答案 4 :(得分:3)

find . -perm /ugo+x -delete

修正了Stephan202第一个命令的版本。

编辑:也试试:

find . -perm /111 -delete

使用八进制等效

答案 5 :(得分:2)

而不是传递-exec rm '{}' \;来找到一个可以使用-delete arg。

答案 6 :(得分:2)

使用find删除不包含dot characeter的所有文件(不是文件夹):

find . \! -name "*.*" -type f -exec rm {} \;

答案 7 :(得分:2)

我建议先使用

find . -not -name "*.*" -exec ls -l {} \;

查看匹配文件的名称。

然后,将ls -l更改为rm

find . -not -name "*.*" -exec rm {} \;

另外,您可以使用确认提示使其更安全:

find . -not -name "*.*" -exec rm -i {} \;

答案 8 :(得分:2)

findutils不推荐使用+omode语法,现在您可以改用/omode

find . -perm /100 -type f -delete

答案 9 :(得分:0)

您可以只在/bin中编译可执行文件,而只是在rm /bin/*中编译。 简单又容易。