可能重复:
使用 rm 删除除一个文件之外的所有文件
这是一个非常简单的问题,我不知道是否存在解决方案。
我在目录中有一些文件,假设我有 .py 和一些其他扩展名文件。现在我想删除除以.py
files 结尾的文件之外的所有文件。如何使用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