在 macOS zsh 下删除 .tgz 文件外的所有文件和文件夹

在日常运维工作中,我们经常需要清理目录中的文件或文件夹,这次我只想保留 .tgz 文件,而删除其他所有的内容。

在 macOS 默认的 zsh 环境中,这个操作和 bash有一些不同的实现方式。

步骤

1. 启用 zsh 的扩展通配符功能

zsh 提供了一些强大的通配符功能,但需要先启用它们。可以通过以下命令启用扩展的通配符匹配:

setopt extended_glob

2. 使用 rm 命令删除文件和文件夹

rm -rf -- ^*.tgz

3. 命令详解

  • setopt extended_glob:启用 zsh 的扩展通配符,使我们可以使用更强大的匹配模式。
  • ^*.tgz^ 用于取反匹配,表示排除所有 .tgz 文件之外的其他文件和文件夹。
  • rm -rf:递归删除所有匹配的文件和文件夹。
  • --:标志命令选项的结束,避免路径被解释为选项。

4. 注意事项

  1. 操作慎重rm -rf 命令非常危险,执行时请务必确认路径和匹配模式正确无误,避免误删重要文件。

  2. 适用范围:上述方法适用于 zsh 环境。

备选方案

如果不想启用 zsh 的扩展通配符,或者希望在 bashzsh 环境下都能通用,可以使用 find 命令:

find /path/to/app -mindepth 1 ! -name "*.tgz" -exec rm -rf {} +

这种方式可以更加灵活地在各种 shell 中使用,特别是在复杂的目录结构中。


解决 Python Selenium 读取含颜文字文件时的 ChromeDriver 错误 如何在 macOS 下查询应用的服务器地址