我有一个目录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 ....
但是我们仍然需要逐个列出所有文件。
答案 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/*
中编译。
简单又容易。