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

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

可能重复:
使用 rm 删除除一个文件之外的所有文件

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

我在目录中有一些文件,假设我有 .py 和一些其他扩展名文件。现在我想删除除以.pyfiles 结尾的文件之外的所有文件。如何使用rm命令执行此操作?

那就是我想要类似的东西

!(rm *.py) 

是否可以?

答案1

shopt -s extglob
rm !(*.py)

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

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

答案2

容易记住的是找到:

find -not -name "*.py" -delete 

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

并非所有find实现都支持该delete选项。Gnu find 自 4.2.3 版起支持该选项。

答案3

假设你正在使用 Bash:

shopt -s extglob
mv !(*.py) some_dir

答案4

ls | grep -v ".py$" | xargs rm

相关内容