例如,我想删除目录中的所有文件,但.tar
它们来自的文件除外。我可以做类似的事情:
find . -maxdepth 0 | grep -v '.tar$' | xargs rm -f
但是有没有办法只使用 rm 和shell 模式匹配?bash
如果无法使用 vanilla 完成,请随意使用或其他常用 shell 或扩展选项指定它sh
。
我发现了一个类似的问题,关于使用 find 避免目录和子目录,但不是使用 shell 模式。
例如,我想删除目录中的所有文件,但.tar
它们来自的文件除外。我可以做类似的事情:
find . -maxdepth 0 | grep -v '.tar$' | xargs rm -f
但是有没有办法只使用 rm 和shell 模式匹配?bash
如果无法使用 vanilla 完成,请随意使用或其他常用 shell 或扩展选项指定它sh
。
我发现了一个类似的问题,关于使用 find 避免目录和子目录,但不是使用 shell 模式。
您可以使用扩展的通配符来做到这一点。
然后
这至少适用于 bash 3.2.39
试试这个
如果看起来正确,请删除 rm 之前的回声。
我不这么认为。至少在我熟悉的 bash 版本中没有。从其他答案看来,较新的版本可能功能更强大。
我认为您想要实现的目标是不可能的。
但是,您可以简化您拥有的命令:
编辑:
快速阅读问题...但是无论如何要继续我的帖子... :-) 如果您想使用 zsh 递归删除除 tar 文件之外的所有文件:
非递归:
新的 bash 4.0 和 zsh 支持递归通配。要在 bash 中启用它,请使用:
它的工作原理如下: