我很早就开始尝试学习 nushell,抱歉!…我想构建一个表,其中包含文件夹中所有递归找到的“.swift”源文件,然后附加一个包含其(计算的)行数的附加列。
这促使我尝试:
ls **/*.swift | insert lineCount { wc -l $in.name }
然而,这似乎不起作用。它打印了很多东西,但似乎是大块的表输出散布在大块的wc
输出中。
谢谢。
我希望Nu为我找到一些文件,过滤它们并将它们传递给外部程序。例如:“使用 Git 恢复名称包含‘GENERATED’的所有文件。” 我尝试了几种变体,但没有一个起作用:
# Doesn't pass the files:
ls --all --full-paths **/* | find GENERATED | git checkout --
# Returns an error: "Cannot convert record<name: string, type: string, size: filesize, modified: date> to a string"
ls --all --full-paths **/* | find GENERATED | each { |it| git checkout -- $it }
# Returns an error for every file: "error: Path specification »?[37m/home/xxx/com.?[0m?[41;37mgwt?[0m?[37mplugins.?[0m?[41;37mgwt?[0m?[37m.eclipse.core.prefs?[0m« does not match any file known to git" [Manually translated into English]
ls --all --full-paths **/* | find GENERATED | each { |it| git checkout -- $it.name }
在 Nu 中这样做的正确方法是什么?
我知道如何用 Bash 做到这一点。这个问题只是关于Nu。:-)
我正在尝试编写一个非常简单的 Nushell 脚本。我想跳过前 46 行并将其余的通过管道传递给外部命令。在 Bash 中:
zcat filename.sql.gz |
tail -n +46 |
mysql dbname
由于 Nushellopen
似乎不支持压缩格式,我提取了.gz
然后在 Nushell 中尝试:
> open --raw filename.sql | lines | skip 46 | describe
list<string>
...所以我有一个列表,因此我应该能够将其转换为一个字符串,但是...
> open --raw filename.sql | lines | skip 46 | to text | mysql dbname
看起来好像试图将整个文件加载到内存中,但它太大了。有没有办法避免这种情况?
如何使用 nu shell 递归地列出文件?
更具体地说:递归地,指定文件夹和每个内部文件夹中的所有文件、文件夹和其他所有内容。
ls **
了,但这不起作用。ls **/**.rs
在Coming from Bash上找到并尝试了ls **/*
. 这似乎可行,但我不得不学习它只列出一些文件,而不是全部文件的艰难方式。我不知道为什么。但我发现了一个ls **/* | where name =~ 'xxx'
发现小于的例子ls **/*xxx*
。(我想在这里包含我的示例,以显示列出的内容和未列出的内容。但是文件夹结构太大了。)ls **/*xxx*
,因为我不想每次都按名称过滤。有时我只需要按其他列过滤。(我希望解决方案是独立于操作系统的。毕竟,nu在其主页上称赞的第一个优势是:“nu 可在 Linux、macOS 和 Windows 上运行。学习一次,然后在任何地方使用。”)