例如,我想删除除了.tar文件之外的目录中的所有文件。 我可以做这样的事情:
find . -maxdepth 0 | grep -v '.tar$' | xargs rm -f
但有没有办法只是使用rm和shell模式匹配 ? 如果无法使用香草sh ,可以使用bash或其他常用的shell或扩展选项指定它。
我发现一个类似的问题,关于避免目录和子目录与查找 ,而不是壳模式。
你可以用扩展的globbing来实现。
shopt -s extglob
然后
rm !(file.tar)
这至less在bash 3.2.39中起作用
我不认为你想达到什么是可能的。
你可以简化你的命令:
find . -maxdepth 0 -not -name '*.tar' -exec rm -f {} +
也许试试这个
find . -maxdepth 0 \! -name '*.tar' -exec echo rm -f {} \;
如果看起来正确,删除rm前面的回显。
是的,但有一个贝壳模式?
我不这么认为。 至less不是在我熟悉的bash版本中。 从其他的答案看来,更新的版本可能更加function。
编辑:
快速阅读问题…但在继续我的post反正… :-)如果你想删除所有的文件,但tar文件recursion与zsh:
rm -rf **/^*.tar(.)
非recursion:
rm -rf ^*.tar(.)
新的bash 4.0和zsh支持recursion通配。 要在bash中启用它:
shopt -s globstar
它的工作原理是:
rm -rf **/*.tar.gz