我正在通過 client-Go 連接到 pod,我想獲取檔案目錄的屬性
func GetPodFiles(c *gin.Context) {
client, _ := Init.ClusterID(c)
path := c.DefaultQuery("path", "/")
cmd := []string{
"sh",
"-c",
fmt.Sprintf("ls -l %s", path),
}
config, _ := Init.ClusterCfg(c)
req := client.CoreV1().RESTClient().Post().
Resource("pods").
Name("nacos-0").
Namespace("default").SubResource("exec").Param("container", "nacos")
req.VersionedParams(
&v1.PodExecOptions{
Command: cmd,
Stdin: false,
Stdout: true,
Stderr: true,
TTY: false,
},
scheme.ParameterCodec,
)
var stdout, stderr bytes.Buffer
exec, err := remotecommand.NewSPDYExecutor(config, "POST", req.URL())
if err != nil {
response.FailWithMessage(response.InternalServerError, err.Error(), c)
return
}
err = exec.Stream(remotecommand.StreamOptions{
Stdin: nil,
Stdout: &stdout,
Stderr: &stderr,
})
if err != nil {
response.FailWithMessage(response.InternalServerError, "Error obtaining file", c)
return
}
fmt.Println(stdout.String())
}
執行結果輸出
total 0
lrwxrwxrwx 1 root root 7 Jun 1 2018 bin -> usr/bin
drwxr-xr-x 5 root root 360 Feb 16 16:39 dev
lrwxrwxrwx 1 root root 8 Jun 1 2018 sbin -> usr/sbin
drwxr-xr-x 2 root root 6 Apr 11 2018 srv
期待結果
"data": [
{
"perm": "drwxr-xr-x",
"mod_time": "2022-03-02 15:02:15",
"kind": "d",
"name": "temp",
"size": ""
},
]
有沒有好的方法或者golang第三方庫來處理。請告訴我。謝謝
uj5u.com熱心網友回復:
在 Kubernetes pod 中,您可以執行statlinux 命令而不是ls命令。
$ stat yourFileOrDirName
這個命令的輸出默認是這樣的:
File: yourFileOrDirName
Size: 346 Blocks: 0 IO Block: 4096 directory
Device: 51h/82d Inode: 40431 Links: 1
Access: (0755/drwxr-xr-x) Uid: ( 1000/ username) Gid: ( 1000/ groupname)
Access: 2022-03-02 11:59:07.384821351 0100
Modify: 2022-03-02 11:58:48.733821177 0100
Change: 2022-03-02 11:58:48.733821177 0100
Birth: 2021-12-21 11:12:05.571841723 0100
但是你可以像這樣調整它的輸出:
$ stat --printf="%n,%A,%y,%s" yourFileOrDirName
其中 %n- 檔案名,%A- 人類可讀形式的權限位和檔案型別,%y- 最后一次資料修改的時間人類可讀,%s- 總大小,以位元組為單位。您還可以選擇任何字符作為分隔符而不是逗號。
輸出將是:
yourFileOrDirName,drwxr-xr-x,2022-03-02 11:58:48.733821177 0100,346
在此處stat查看有關該命令的更多資訊。
得到這樣的輸出后,我相信如果您真的需要它,您可以輕松地將其“轉換”為 json 格式。
此外,您可以stat像這樣運行命令:
$ stat --printf="{\"data\":[{\"name\":\"%n\",\"perm\":\"%A\",\"mod_time\":\"%y\",\"size\":\"%s\"}]}" yourFileOrDirName
或者正如@mdaniel 所建議的那樣,由于該命令不包含任何shell 變數,也不包含 a ',因此更簡潔的命令是:
stat --printf='{"data":[{"name":"%n","perm":"%A","mod_time":"%y","size":"%s"}]}' yourFileOrDirName
并獲得 DIY json 輸出:
{"data":[{"name":"yourFileOrDirName","perm":"drwxrwxr-x","mod_time":"2022-02-04 15:17:27.000000000 0000","size":"4096"}]}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/438865.html
標籤:走 Kubernetes
上一篇:每次寫檔案時如何在末尾加上逗號?
下一篇:將結構中的字串轉換為[]字串
