使用rm *.sh
删除以.sh结尾的文件很容易理解。但是如何删除当前目录中不以.jar
结尾的所有文件
像rm * -except *.jar
答案 0 :(得分:6)
试试这个:
find . -mindepth 1 -maxdepth 1 ! -name '*.jar' | sort
如果您确实要删除其输出中的所有文件,请执行
find . -mindepth 1 -maxdepth 1 ! -name '*.jar' -delete
您可以阅读find(1)手册页,了解有关这个功能强大的工具的更多信息。
编辑:
由于-delete标志仅在GNU find>中找到4.2.3(正如SiegeX所指出的),这里有几个替代方案,它们也确保我们不会尝试删除目录:
find . -mindepth 1 -maxdepth 1 ! -type d ! -name '*.jar' -print0 | xargs -0 -r rm -f
-r xargs标志是一个GNU扩展,所以这稍微更容易移植(它适用于* BSD),但不是那么干净:
find . -mindepth 1 -maxdepth 1 ! -type d ! -name '*.jar' -print0 | xargs -0 rm -f
作为最后 - 但最便携的 - 度假胜地:
find . -mindepth 1 -maxdepth 1 ! -type d ! -name '*.jar' -exec rm '{}' ';'
这样做的缺点是为每个文件分别调用rm,这使得速度明显变慢。
答案 1 :(得分:1)
echo $(ls | grep -v '.jar$')
rm $(ls | grep -v '.jar$')
答案 2 :(得分:1)
您可以通过启用扩展的glob extglob
选项然后将您的模式放在!()
中来执行此操作:
shopt -s extglob;
rm !(*.jar)
请注意,extglob
还会为您提供以下内容:
?()
- 匹配零或其中一个模式*()
- 匹配零个或多个模式@()
- 完全匹配其中一种模式!()
- 匹配除模式