使用 rm 删除不以“.py”结尾的文件

0 linux bash shell rm

可能的重复:
删除所有文件,但一个带有 rm 的文件

这是一个非常简单的问题,我不知道是否存在解决方案。

我在一个目录中有一些文件,假设我有 .py 和一些其他扩展文件。现在我想删除除以.py文件结尾的文件之外的所有文件。我怎么能用rm命令做到这一点?

那是我想要的东西

!(rm *.py) 
Run Code Online (Sandbox Code Playgroud)

是否可以?

Raf*_*ler 8

shopt -s extglob
rm !(*.py)
Run Code Online (Sandbox Code Playgroud)

您启用 extglob 变量。这为您提供了一些额外的模式匹配功能,尤其是否定。

您可以使用 再次禁用它shopt -u extglob


use*_*own 5

容易记住的是找到:

find -not -name "*.py" -delete 
Run Code Online (Sandbox Code Playgroud)

与 larsmas 解决方案相比,它也会删除子目录中的文件,但您可以使用 -maxdepth 参数来防止这种情况。

并非每个find实现都可能支持该delete选项。Gnu find 从 4.2.3 版开始。