DolphinDB函数files只能列出当前目录下的所有文件,文件名不是完整路径.如何像Linux find命令一样列出目录中所有扩展名为.gz的文件?

[xjqian@k8s-2 ~]$ find ./ -name "*.gz"
./cmake-3.12.3.tar.gz
./mongoose/test/data/hello.txt.gz

推荐答案

您可以定义如下函数:

def findR(path, pattern=NULL){
    t = files(path)
    if (isValid(pattern)){
        t = files(path, pattern)
    }
    res = select * from t where !isDir
    update res set res.filename = path +"/" + res.filename
    for (f in select * from files(path) where !!isDir){
        try {
            subRes =  findR(path+"/"+f.filename, pattern)
            res.append!(subRes)
        } catch(ex){
            print("ex:"+path+"/"+f.filename+ string(f.isDir))
        }
    }
    return res
}

例如:

findR("c:/tmp", pattern="%.log")

输出:

filename            isDir   fileSize    lastAccessed    lastModified
c:/tmp/controller.log   false   543,619,626 2022.05.14T09:09:52.405 2022.05.14T06:04:22.000
c:/tmp/P1-node1.log false   729,729,122 2022.05.14T09:10:05.156 2022.05.14T05:44:13.000
c:/tmp/bd/Output.log    false   44,088          2022.04.03T12:30:56.523 2022.04.03T12:30:56.523

Linux相关问答推荐

使用sed替换字符,但如果它是在bash csv文件中的字符串中,则不使用

将参数#0更改为shell脚本不工作

Flutter 构建错误:';DART:JS_interop';在此平台上不可用

JSON 转义 CURL/JQ 输出

无法放弃所有权限,但可以放弃 CAP_SETUID 权限.

如何使 awk 输出更具可读性?

ln命令报错target not a directory

文件未在脚本中使用 cp 命令复制到 Docker 容器中

x86_64 Linux 程序集中的逻辑与实现

使用具有特定值的字段对文件进行排序

ld-linux.so.2 和 linux-gate.so.1 是什么?

bash 中的sed命令

如何在 shell 脚本中动态生成新的变量名?

如何将整个文件夹从 Amazon EC2 Linux 实例复制到本地 Linux 机器?

从Linux中的行尾删除空格

为 django 项目安装 memcached

让 sudo 和 nohup 一起工作

用于 ssh 的类似 teamviewer 的工具?

Shell 脚本, echo 消息后在同一行读取

使用 WGET 运行 cronjob PHP