我有一个包含所有 C 程序的目录。我还在创建时编译了它们,以便检查我的代码。有很多程序近 100 个。所以我想要一个 BASH 脚本来检查文件是否以“.c”结尾。如果它这样做,那么它什么都不做,如果它不这样做,那么它将删除它们。假设我的文件名之一是“Hello.c”,那么我在编译时将其二进制文件命名为“Hello”。那么有人可以为我制作这个脚本吗?
Ber*_*ard 21
您可以使用(first test with )的-delete
标志find
-ls
find -not -name "*.c" -delete
Run Code Online (Sandbox Code Playgroud)
如果您不想使用find
,而只想使用当前目录中的文件,您可以这样做
rm !(*.c)
Run Code Online (Sandbox Code Playgroud)
确保在bash
与shopt -s extglob
正确的通配设置。此外,如果您有 globstar set ( shopt -s globstar
),您可以递归操作(对于bash
4 以上的版本):
rm **/!(*.c)
Run Code Online (Sandbox Code Playgroud)
find
在这种情况下,我总是更喜欢。您不必担心特殊的文件名,您可以处理不同的文件类型。如果您只想删除文件,您应该添加-type f
到您的选项中。所以我最喜欢的解决方案是:
find -not -name "*.c" -type f -delete
Run Code Online (Sandbox Code Playgroud)
不过要小心。测试这样的命令总是一个好主意。