Zsh遍历脚本修改咨询:适配目录与指定文件需求
Zsh脚本问题解答
1. 核心代码(./**/*(.NDoN))的工作原理
整体逻辑
./**/*(.NDoN)是Zsh的递归文件匹配表达式,作用是筛选出当前目录及所有子目录下符合条件的普通文件,为后续复制检测I/O错误提供目标文件列表。
各部分拆解
./**/*:Zsh的递归通配符模式**:匹配当前目录及所有嵌套子目录的层级*:匹配任意文件名/目录名
(.NDoN):Zsh的Glob修饰符,用于过滤和调整匹配规则,每个字符的含义:.:仅保留普通文件(排除目录、符号链接、设备文件等特殊类型文件)N:启用局部nullglob模式——如果没有匹配到任何文件,表达式返回空列表,而非原样输出./**/*,避免后续脚本处理空匹配时报错D:启用局部dotglob模式——匹配以.开头的隐藏文件/目录(结合前面的.修饰符,最终会包含隐藏的普通文件)oN:指定排序规则为自然排序(比如file10会排在file2之后,而默认字典序会把file10放在file2前面)
2. 需求修改方案
需求1:仅非递归遍历当前目录下的所有目录
调整Glob模式和修饰符,去掉递归通配符并指定匹配目录:
(./*(/ND))
- 拆解:
./*:仅匹配当前目录下的直接条目(非递归,不深入子目录)/:仅保留目录(替换原有的.普通文件修饰符)N+D:保留空匹配处理和隐藏目录匹配的规则
需求2:仅非递归遍历当前目录下的所有文件(深度为1)
去掉递归通配符**,仅匹配当前目录的普通文件:
(./*(.ND))
- 拆解:
./*:仅匹配当前目录下的直接条目(深度为1,不递归子目录).:仅保留普通文件N+D:保留空匹配处理和隐藏文件匹配的规则
内容的提问来源于stack exchange,提问作者Greg
相关产品推荐
相关产品推荐

