首页 > 其他分享 >go ssh判断远程文件是否存在以及定时监控文件的大小

go ssh判断远程文件是否存在以及定时监控文件的大小

时间:2023-01-31 09:45:24浏览次数:36  
标签:文件 fmt strconv host value length ssh go ls



package sshutil

import (
"fmt"
"path"
"strconv"
"strings"
"time"

"github.com/fanux/sealos/pkg/logger"
)

const oneKBByte = 1024
const oneMBByte = 1024 * 1024

//WatchFileSize is
func (ss *SSH) LoggerFileSize(host, filename string, size int) {
t := time.NewTicker(3 * time.Second) //every 3s check file
defer t.Stop()
for {
if <-t.C; true {
length := ss.CmdToString(host, "ls -l "+filename+" | awk '{print $5}'", "")
length = strings.Replace(length, "\n", "", -1)
length = strings.Replace(length, "\r", "", -1)
lengthByte, _ := strconv.Atoi(length)
if lengthByte == size {
t.Stop()
}
lengthFloat := float64(lengthByte)
value, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", lengthFloat/oneMBByte), 64)
logger.Info("[ssh][%s]transfer total size is: %.2f%s", host, value, "MB")
}
}
}

//RemoteFileExist is
func (ss *SSH) IsFileExist(host, remoteFilePath string) bool {
// if remote file is
// ls -l | grep aa | wc -l
remoteFileName := path.Base(remoteFilePath) // aa
remoteFileDirName := path.Dir(remoteFilePath)
//it's bug: if file is aa.bak, `ls -l | grep aa | wc -l` is 1 ,should use `ll aa 2>/dev/null |wc -l`
//remoteFileCommand := fmt.Sprintf("ls -l %s| grep %s | grep -v grep |wc -l", remoteFileDirName, remoteFileName)
remoteFileCommand := fmt.Sprintf("ls -l %s/%s 2>/dev/null |wc -l", remoteFileDirName, remoteFileName)

data := ss.CmdToString(host, remoteFileCommand, " ")
count, err := strconv.Atoi(strings.TrimSpace(data))
defer func() {
if r := recover(); r != nil {
logger.Error("[ssh][%s]RemoteFileExist:%s", host, err)
}
}()
if err != nil {
panic(1)
}
return count != 0
}

func toSizeFromInt(length int) (float64, string) {
value, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", float64(length)/oneMBByte), 64)
if isMb := length/oneMBByte > 1; isMb {
return value, "MB"
}
value, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", float64(length)/oneKBByte), 64)
return value, "KB"
}

标签:文件,fmt,strconv,host,value,length,ssh,go,ls
From: https://www.cnblogs.com/cheyunhua/p/17077878.html

相关文章

  • 【KAWAKO】MobaXterm-使用MobaSSHTunnel进行端口映射
    目录在Tools中打开MobaSSHTunnel(portforwarding)点击NewSSHtunnel配置信息点击运行访问端口在Tools中打开MobaSSHTunnel(portforwarding)点击NewSSHtunnel配置......
  • 6.文件命令
          ../取代绝对路径,其中。。表示返回当前目录的上一层菜单  绝对路径、相对路径取决于前面的/  cd-:返回之前的文件夹,即从哪个文件夹跳过来回哪个......
  • Mongodb的安装部署
    它是由C++编写的分布式文档数据库。内部使用类似于Json的bson格式。官网文档https://docs.mongodb.com/中文手册https://www.w3cschool.cn/mongodb/安装https://www.m......
  • Python操作Mongodb
    客户端客户端连接$bin/mongo.exeMongoDBshellversionv3.6.13help打开帮助showdbs#查看当前有哪些库useblog#有就切换过去,没有就创建后切换过去。......
  • 【小记】golang_map
    map前言:map几个操作实现有点复杂,即便之前看懂了没过多久也就忘了,这里简单做下记录。为了便于记忆,将mapassign的全过程以流程图的方式展示,其他省略mapassign在流程图......
  • 使用 Python 操作 Mongo 数据库
    1.简介MongoDB是一个基于分布式文件存储的数据库,旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,它支持的......
  • 阿里云ssh登陆报错Permission denied (publickey,gssapi-keyex,gssapi-with-mic)
    今天遇到了一个怪事,之前的ecs密钥找不到了,无奈重新生成密钥并绑定到机器上。然而用nat网关配置好了之后,不能正常登陆。Permissiondenied(publickey,gssapi-keyex,gssap......
  • ArcGIS Pro导入3d Max模型文件
    ArcGISPro支持传统三维模型(如3dMax)、BIM、OSGB等格式的导入。测试数据下载地址:https://www.pland.gov.hk/pland_sc/info_serv/3D_models/download.htm基本流程如下:(1)......
  • ssh 关闭密码登录
    创建许可文件先使用ssh-keygen-trsa来生成.ssh目录,然后把生成的密钥下载到本地,并在.ssh下创建一个空文件authorized_keys。录入公钥使用vim打开authorized_......
  • go笔记-并发赋值安全性
    参考资料https://cloud.tencent.com/developer/article/1810536并发赋值安全/不安全的类型并发赋值安全的类型:字节型,布尔型、整型、浮点型、字符型、指针、函数这些......