在 macOS zsh 下删除 .tgz 文件外的所有文件和文件夹
2024-08-19 tech mac zsh 1 mins 624 字
在日常运维工作中,我们经常需要清理目录中的文件或文件夹,这次我只想保留 .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. 注意事项
-
操作慎重:
rm -rf
命令非常危险,执行时请务必确认路径和匹配模式正确无误,避免误删重要文件。 -
适用范围:上述方法适用于
zsh
环境。
备选方案
如果不想启用 zsh
的扩展通配符,或者希望在 bash
和 zsh
环境下都能通用,可以使用 find
命令:
find /path/to/app -mindepth 1 ! -name "*.tgz" -exec rm -rf {} +
这种方式可以更加灵活地在各种 shell 中使用,特别是在复杂的目录结构中。