使用`find . -depth 1 -type d`遍历目录时出错求助
解决
find: paths must precede expression: '1'错误 错误根源
你搞混了find的选项用法:-depth是控制遍历顺序的开关(让find先处理子目录再处理父目录,即深度优先遍历),它不需要跟任何数值参数。而你想要限制只搜索当前目录下一级的目录,对应的正确选项是-maxdepth 1。
当你写-depth 1时,find会把1识别成一个路径参数,但它出现在选项之后,违反了find“路径必须在表达式/选项参数之前”的规则,因此抛出了这个错误。
修正方案
基础修复
把错误的-depth 1替换成-maxdepth 1即可:
for dir in `find . -maxdepth 1 -type d` do # 你的业务逻辑代码 done
更健壮的写法(推荐)
用反引号捕获命令输出时,如果目录名包含空格、换行符等特殊字符会出问题,建议改用while read的方式处理:
find . -maxdepth 1 -type d | while read -r dir do # 你的业务逻辑代码 done
兼容老版本find的备选方案
如果是在BSD系系统(比如macOS)或者使用非常老的find版本,-maxdepth可能不支持,可以用-prune实现相同效果:
find . -type d -name . -o -prune -type d
内容的提问来源于stack exchange,提问作者wardz
相关产品推荐
相关产品推荐

