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

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

事实上,我认为这种要求太过分了。

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

find . -maxdepth 1 -type f -name '*.sh' -exec rm {} +

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

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

答案1

您可以使用-not

find . -maxdepth 1 -type f -name '*.sh' -not -name cron.sh -delete

此外,GNUfind具有-delete比 更易于使用的选项rm -rf

重要的:始终放在-delete最后。如以下说明man find

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


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

for f in *.sh; do [ "$f" = "cron.sh" ] || rm "$f"; done

答案2

find另一种方法,但比这个好例子慢特登是使用mvrm命令与和运算符链接起来。

mv cron.sh cron.sh.safe && rm *.sh && mv cron.sh.safe cron.sh

如果您有任何名为 something.sh 的目录,这将会产生抱怨,但不会删除它们。

相关内容