如何删除不以“.c”结尾的文件?

Pra*_*uva 5 bash wildcards rm

我有一个包含所有 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)

确保在bashshopt -s extglob正确的通配设置。此外,如果您有 globstar set ( shopt -s globstar),您可以递归操作(对于bash4 以上的版本):

rm **/!(*.c)
Run Code Online (Sandbox Code Playgroud)

  • 也可以在 find 中添加 `-maxdepth 1` 来停止递归。 (2认同)
  • `-delete` 不可移植,如果这很重要,你可以使用 `-exec rm` 代替。 (2认同)

Ron*_*Tom 5

find在这种情况下,我总是更喜欢。您不必担心特殊的文件名,您可以处理不同的文件类型。如果您只想删除文件,您应该添加-type f到您的选项中。所以我最喜欢的解决方案是:

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

不过要小心。测试这样的命令总是一个好主意。