byzer-lang icon indicating copy to clipboard operation
byzer-lang copied to clipboard

Byzer 提供更丰富和便利的文件系统操作支持

Open allwefantasy opened this issue 2 years ago • 0 comments

Byzer 在文件系统的操作能力比较薄弱,目前仅支持部分命令,诸如 !fs -ls , !fs mv 等常见能力。但现实中对文件系统的操作要求是很复杂的。比如这个需求:https://github.com/byzer-org/byzer-lang/issues/1810 或者这个需求:https://zhuanlan.zhihu.com/p/552065988? 当然还有更复杂的需求。

有两个层面解决:

  1. 通过 ET 来根据具体需求解决。这个一般适合一些定制化或者非泛化的需求,是个不错的主意。
  2. 通过扩展 !fs 来解决,可以提供一些特有的选项,为了和以前的做区别,要求第一个参数是 utils.

举例:

!fs utils rename "/tmp/*.csv"   "/tmp/sub"  "(\\.csv)$"  ".txt"; 

用户也可以这么写:

!fs utils rename _ -source "/tmp/*.csv"  -target "/tmp/sub"  -pattern "(\\.csv)$"  -replace ".txt"; 

这表示需要对匹配到的所有 csv文件进行改名,改名后放到 "/tmp/sub" 目录下,改名的方式为正则修改原文件名称。没有匹配到的,则原封不动的移动到新的目录下。

这里的效果是,这里我们会将所有 .csv 后缀改成 .txt 后缀,同时保留文件名。

还有比如:

!fs utils getmerge "/tmp/*.csv" "/tmp/a.csv" 1;

表示合并所有文件(对除了第一个文件的每个待合并的文件去掉第一行),生成一个 a.csv文件,

也可以这么写:

!fs utils getmerge _  -source "/tmp/*.csv"  -target "/tmp/a.csv"  -skipNLines 1;

allwefantasy avatar Aug 10 '22 10:08 allwefantasy