You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Nushell中递归搜索目录时避免权限错误?

问题

在Nushell中执行ls -f **/*递归遍历用户AppData文件夹时,进程因权限问题提前终止,错误信息如下:

Error: nu::shell::error

  × Error extracting glob pattern
   ╭─[entry #53:1:1]
 1 │ ls -f **/*
   · ─┬
   ·  ╰── attempting to read `C:\Users\my_name\AppData\Local\Application Data` resulted in an error: Access is denied. (os error 5)
   ╰────

原本计划通过ls -f **/* | find 251204递归搜索含"251204"的文件,希望找到简单方法避免/忽略无权限目录,允许命令继续执行并仅提示权限错误。

解决方案

以下是几个适合Nushell新手的简单方案:

1. 使用glob命令配合--ignore-errors参数

glob命令专门用于匹配文件路径,自带忽略错误的选项,能跳过权限不足的目录继续执行:

glob **/* --ignore-errors | find 251204
  • --ignore-errors会让命令忽略权限拒绝、文件不存在等错误,不会终止进程
  • 最终仍会输出所有可访问路径中符合条件的文件

2. 用errors suppress包裹ls命令

Nushell的错误抑制块可以捕获并忽略指定命令的错误,让ls继续遍历其他目录:

errors suppress { ls -f **/* } | find 251204
  • errors suppress {}会包裹住可能出错的ls命令,权限错误会被抑制,进程不会中断
  • 如果需要保留权限错误提示,可改用errors capture并过滤结果:
    errors capture { ls -f **/* } | where type == "value" | find 251204
    
    这里where type == "value"会过滤掉错误条目,只保留正常的文件路径。

3. 直接指定目标子目录(更高效)

如果你确定目标文件不在权限受限的目录里,可以直接指定要遍历的子目录,完全避开权限问题:

ls -f Roaming/**/* | find 251204
# 或者同时遍历多个目录
ls -f {Roaming,Local/MyApps}/**/* | find 251204

这种方法不仅避免了权限错误,还能减少遍历的文件数量,提升搜索速度。

内容的提问来源于stack exchange,提问作者Mat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 22:12:33