byzer-lang
byzer-lang copied to clipboard
Byzer 提供更丰富和便利的文件系统操作支持
Byzer 在文件系统的操作能力比较薄弱,目前仅支持部分命令,诸如 !fs -ls
, !fs mv
等常见能力。但现实中对文件系统的操作要求是很复杂的。比如这个需求:https://github.com/byzer-org/byzer-lang/issues/1810 或者这个需求:https://zhuanlan.zhihu.com/p/552065988? 当然还有更复杂的需求。
有两个层面解决:
- 通过 ET 来根据具体需求解决。这个一般适合一些定制化或者非泛化的需求,是个不错的主意。
- 通过扩展
!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;