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

nev*_*int 7 c++ unix linux file

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

src/
  |_ foo.cc
  |_ bar.cc
  |_ qux.cc
  |_ thehead.hh
  |_ foo  (executable/binary)
  |_ bar  (executable/binary)
  |_ qux  (executable/binary)
  |_ makefile
Run Code Online (Sandbox Code Playgroud)

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

我需要以全局方式删除这些二进制文件,而不必列出所有文件.有一种快速而紧凑的方式吗?

我试过了:

$ rm *
Run Code Online (Sandbox Code Playgroud)

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

我知道这个命令:

$ rm foo bar qux ....
Run Code Online (Sandbox Code Playgroud)

但是我们仍然要逐一列出所有文件.

Ric*_*dle 17

干得好:

ls | grep -v "\." | xargs rm
Run Code Online (Sandbox Code Playgroud)

grep -v说"只允许不包含点文件名",并xargs rm说"然后通过文件名的名单rm".

  • @Richie:谢谢.有没有办法排除"makefile"?我们要保留. (5认同)
  • @foolishbrat:只需添加另一个grep:ls | grep -v"\." | grep -v makefile | xargs rm (4认同)
  • 排除子目录怎么样?猜测您需要使用“find”而不是“ls”?另外,您可以使用一个 `grep` 来排除带有 `.` 和 `Makefile` 的文件,如下所示:grep -v "\.\|Makefile"` (2认同)

kcw*_*cwu 17

你可以跑

find . -perm +100 -type f -delete
Run Code Online (Sandbox Code Playgroud)

  • 为了清楚起见,这只检查是否设置了用户的exec位,并且它使用了不推荐的语法.请参阅man find for the gory details. (3认同)

Ste*_*202 11

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

find . -type f -executable -exec rm '{}' \;
Run Code Online (Sandbox Code Playgroud)

删除没有扩展名的所有内容也可以完成:

find . -type f -not -iname "*.*" -exec rm '{}' \;
Run Code Online (Sandbox Code Playgroud)

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

find . -type f -executable -delete
find . -type f -not -iname "*.*" -delete
Run Code Online (Sandbox Code Playgroud)

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


rai*_*mue 5

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