删除所有扩展名为“.sh”的文件,但保留一个与终端扩展名匹配的文件

Vic*_*Dev 3 command-line find

其实这种要求太多了我觉得。

但我想删除与扩展名“.sh”(仅限当前文件夹)匹配的所有文件,我可以使用以下命令执行此操作:

find . -maxdepth 1 -type f -name '*.sh' -exec rm {} +
Run Code Online (Sandbox Code Playgroud)

但我仍然想保持当前文件夹中的文件“cron.sh”不受影响。

如何在单个命令行中实现这一点?

ter*_*don 5

您可以使用-not

find . -maxdepth 1 -type f -name '*.sh' -not -name cron.sh -delete
Run Code Online (Sandbox Code Playgroud)

此外,GNUfind有一个-delete选项,它比rm -rf.

重要提示:始终放在-delete最后。如中所述man find

警告:不要忘记 find 命令行被评估为表达式,因此将 -delete 放在首位将使 find 尝试删除您指定的起点以下的所有内容。


或者,您可以使用 shell 循环(但不要这样做,find上面的命令效率更高):

for f in *.sh; do [ "$f" = "cron.sh" ] || rm "$f"; done
Run Code Online (Sandbox Code Playgroud)