我不是IPFS和Linux方面的Maven,但我会尽我所能描述一个问题。
这里有一个txt文件,其中包含行,表示文件名列表及其IPFS CID(我假设)。
该文件的结构如下:
"description of a file" "IPFS CID"
description1 CID1.....shnpnhzuquz3ho7vvabqjyide
description2 CID2.....keg4rklbzenppnyrjk554h5ru
还有一个描述,如何用linux命令来做,应该把这个文件中的每一行都固定到IPFS。
cat file.txt | xargs -L1 bash -c 'ipfs pin add $1'
如何通过Windows PowerShell执行此命令?
我试着输入以下内容(通过这个问题的类比-Convert xargs Bash command to PowerShell?)
cat file.txt | %{ipfs pin add $_}
但它产生错误:
Error: invalid path "description1 CID1.....shnpnhzuquz3ho7vvabqjyide": selected encoding not supported
Error: invalid path "description2 CID2.....keg4rklbzenppnyrjk554h5ru": selected encoding not supported
.....
4条答案
按热度按时间zsbz8rwp1#
我将答案保持原样,因为将来的读者可能会对处理标题行的技术感兴趣。
bash
命令将尝试执行标题中包含单词of
的ipfs pin add
)。ipfs pin add
,这就是xargs -L1
与bash -c '... $1'
* 隐式 * 组合所做的事情。注意事项:
cat
是PowerShel的Get-Content
cmdlet的内置 * 别名 *,在类Unix平台上,它指的是标准实用程序/bin/cat
。select
是Select-Object
的内置别名,并且,使用文本行作为输入,Select-Object -Skip 1
等同于tail -n +2
%
是ForEach-Object
的内置别名,它通过script block({ ... }
)处理每个输入对象,其中自动$_
变量引用手头的输入对象。-split
operator的一元形式用于将每行拆分为空格分隔的标记,[1]
从结果数组中提取第二个标记。.Split()
.NET字符串 * 方法 *,如您对自己的问题所做的评论中所示:在本例中,$_.Split(" ")[1]
等效于(-split $_)[1]
-split
operator 更通用,并且是PowerShell惯用的-有关背景信息,请参阅this answer。注意:我不熟悉
ipfs
,但请注意,ipfs pin add
的文档中只提到了将 * 路径 * 作为参数传递,而不是CID--ipfs pin remote add
支持CID。一种替代方法是将输入文件视为(空格)分隔的文件,并使用
Import-Csv
将其解析为对象,这允许您按列名提取列值:由于**
ipfs pin add
支持 * 多个 * 参数**,因此您可以简化并加快命令的执行速度,具体如下:只需要 * 一个 *ipfs pin add
调用:这利用了PowerShell的member-access enumeration功能和PowerShell在调用外部实用程序时将 * 数组 * 值转换为 * 单个参数 * 的能力。
请注意,至少在假设情况下,您可能遇到的命令行长度有特定于平台的限制(这是只有
xargs
会自动处理的事情,通过将参数划分为尽可能少的调用)。bhmjp9jg2#
而不是尝试在powershell上执行此操作,使用powershell转到WSL,设置IPFS(Kubo for Go使用Linux指南)并使用此命令固定文件。手动删除第一行的标题。
有一点要注意:你的repo可能不在默认位置,并且windows env变量不能带入WSL,所以使用以下命令将你的路径添加到.bashrc
添加导出命令
esc,键入:wq并输入以保存和退出。使用
将其加载到当前的powershell以使更改立即生效。使用ipfs init检查节点初始化位置。启动另一个powershell bash窗口来验证路径总是在启动时更改为您指定的路径。
ut6juiuv3#
我需要澄清,文件中没有标题。所以我编辑了初始命令。目前,有两个命令都运行良好:
1:
和2:
我认为在固定特定线路时存在问题。意外的是第11行。anonymouspanda是另一个用户,我想我也遇到了同样的问题。
hk8txs484#
由于条目#11,它在固定10之后开始挂起。我删除了条目#11之前的5个条目,现在是条目#6。代码在挂起之前固定了5个条目,并且挂起在6上。我不确定是什么原因导致它挂在特定的条目,但这段代码在powershell中运行得很好: