如何使用 nu shell 递归地列出文件?
更具体地说:递归地,指定文件夹和每个内部文件夹中的所有文件、文件夹和其他所有内容。
- 我试过
ls **
了,但这不起作用。 - 我用谷歌搜索,
ls **/**.rs
在Coming from Bash上找到并尝试了ls **/*
. 这似乎可行,但我不得不学习它只列出一些文件,而不是全部文件的艰难方式。我不知道为什么。但我发现了一个ls **/* | where name =~ 'xxx'
发现小于的例子ls **/*xxx*
。(我想在这里包含我的示例,以显示列出的内容和未列出的内容。但是文件夹结构太大了。) - 我不能使用
ls **/*xxx*
,因为我不想每次都按名称过滤。有时我只需要按其他列过滤。
(我希望解决方案是独立于操作系统的。毕竟,nu在其主页上称赞的第一个优势是:“nu 可在 Linux、macOS 和 Windows 上运行。学习一次,然后在任何地方使用。”)
我认为我们在评论和聊天中至少确定了两件事:
ls -a
应该用于确保隐藏目录中的文件包含在结果中。Nushell 目前似乎存在一个错误,因此
ls **/*abc*
有时会返回隐藏目录中不(奇怪)匹配“abc”的文件,但会忽略隐藏目录中匹配的文件。如果有的话,我希望结果会被反转,但我真的希望ls
总是忽略隐藏目录中的文件,除非-a
使用了标志。我已经写了一个关于这个主题的Github 问题。
因此,目前,要可靠地返回文件名或路径中带有“xxx”的所有文件,请使用.
ls -a **/*xxx*
如果您只想返回文件名中带有“xxx”的文件(而不是路径的任何其他部分),那么:
请注意,实验性 Nushell
glob
命令(在 0.61 中)将始终使用 来返回隐藏目录中的文件glob **/*xxx*
,但它只返回文件名,而不是在 Nushell 列中,如ls
,因此听起来它不适用于您的用例:^find
(不是内置的,而是二进制的)也是如此。但是,请注意,使用
ls
返回文件名进行处理确实有一些限制,至少使用当前的 Nushell 命令:^find -xdev
选项一样。ls **/*
将递归地遵循符号链接。如果你有类似的东西ln -s .. parent
,那么ls
将进入一个无限循环。find
,默认情况下,不遵循符号链接。一般来说,我会非常小心地
ls **/...
在当前的 Nushell 版本中使用 glob。二进制文件可能是一个更安全的^find
选择,至少现在是这样。或安装
“正文必须至少有 30 个字符;您输入了 24 个字符。”