根據時間建立文件,存儲到linux中,再將linux下的幾個目錄根據時間名來打包下載到本地



1. 在當前python項目目錄下建立work目錄,並在其中建立同名文本文檔work.txt,在txt文件中寫入
當前日期的月和日便可
2. 鏈接虛擬機,將剛纔寫好的work.txt上傳到虛擬機/home/目錄下,同時將本地的work.txt刪除。
3. Linuxetc目錄下的passwd,shadow,group三個文件使用tar命令進行打包,包名爲work.txt的內容加上文件的首字母,例如:0725p.tar.gz0725s.tar.gz0725g.tar.gz,將壓縮後的三個
文件下載到本地work目錄
'''
import os
import paramiko
import datetime
import shutil

class linux():

    def __init__(self,ip,port,user,password,workpath,linuxpath):
        self.ip=ip
        self.port=port
        self.user=user
        self.password=password
        self.workpath=workpath
        self.linuxpath=linuxpath


#1. 在當前python項目目錄下建立work目錄,並在其中建立同名文本文檔work.txt,在txt文件中寫入當前日期的月和日便可
    def chuangjian(self):

        #判斷有沒有對應文件夾
        if os.path.exists(self.workpath):
            #若是有,就刪除該文件
            shutil.rmtree(self.workpath)
            print('文件已刪除')
        else:
            # 建立文件夾
            os.mkdir('work')
            #進入文件夾
            os.chdir('work')
            f=open('work.txt','w')
            #建立時間
            s = str(datetime.datetime.now())
            #將時間寫入文件2020-07-27 10:51:09.800656
            f.write(s[5:7]+s[8:10])

        #設置時間
        print(s[5:7]+s[8:10])


    #2. 鏈接虛擬機,將剛纔寫好的work.txt上傳到虛擬機/home/目錄下,同時將本地的work.txt刪除
    def shangchuan(self):
        #獲取通道
        ssh=paramiko.Transport(self.ip,self.port)
        ssh.connect(username=self.user,password=self.password)
        p=paramiko.SFTPClient.from_transport(ssh)
        #判斷有沒有該文件
        if os.path.exists(self.workpath):
            #讀出目錄的文件
            file1= os.listdir(self.workpath)
            if len(file1) == 0:
                print('目錄爲空..')
            else:
                #拼接路徑
                newfile=''.join(file1)
                #拼接路徑    本地路徑                                linux路徑
                p.put(os.path.join(self.workpath,newfile),f'{self.linuxpath}/{newfile}')
                print('文件已上傳.....')
                os.remove(os.path.join(self.workpath,newfile))

                if len(os.listdir(self.workpath)) == 0:
                    print('本地文件已刪除')
                else:
                    print('刪除失敗!!!')
        else:
            print("本地文件路徑錯誤。。。。。")

    # 3.
    # Linuxetc目錄下的passwd, shadow, group三個文件使用tar命令進行打包,包名爲work.txt    # 的內容加上文件的首字母,例如:0725
    # p.tar.gz0725
    # s.tar.gz0725
    # g.tar.gz,將壓縮後的三個
    # 文件下載到本地work目錄
    def xiazai(self):
        #操做linux死格式
        ssh = paramiko.SSHClient()
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        ssh.connect(hostname=self.ip,port=self.port,username=self.user,password=self.password)
#獲取work文件中的月日信息
        #讀出linux中的work.txt文件
        stdin, stdout, stderr = ssh.exec_command(f'cat {self.linuxpath}/work.txt')
        time=stdout.read().decode('utf-8')
        print(time)

#壓縮文件----獲取壓縮後的文件名字
        #設置個集合存儲要壓縮的文件名
        list1=['passwd','shadow','group']
        #壓縮到home        for i in list1:
            ssh.exec_command(f'tar -zcvf {self.linuxpath}/{time}{i[0]}.tar.gz /etc/{i}')
        #輸出home下的內容
        stdin, stdout, stderr = ssh.exec_command(f'cd {self.linuxpath}/;ls')
        #讀出數據
        allstr = stdout.read().decode('utf-8').replace('\n', '')
        #print(allstr)#0727g.tar.gz0727p.tar.gz0727s.tar.gzlrk1work.txt
        #將數據分割
        tarstr = allstr[:12] + ',' + allstr[12:24] + ',' + allstr[24:36]
        tarlist = tarstr.split(',')
        print(tarlist)

#下載
        #循環名字
        for i in tarlist:#['0727g.tar.gz', '0727p.tar.gz', '0727s.tar.gz']
            #設置通道
            s = paramiko.Transport(self.ip, self.port)
            s.connect(username=self.user, password=self.password)
            p = paramiko.SFTPClient.from_transport(s)

            if os.path.exists(self.workpath):
                #下載文件
                p.get(self.linuxpath+'/'+i,os.path.join(self.workpath,i))
                print(f'{i}壓縮包已下載')
            else:
                print('work路徑不存在,沒法下載到本地')

#調用類方法
li=linux('192.168.56.1', 22, 'root', '123456', r'D:\pythoncode\work', '/home')
# li.chuangjian()第一問,建立文件,寫入內容
# li.shangchuan()#第二問,上傳
li.xiazai()#第三問,壓縮文件,下載到本地
相關文章
相關標籤/搜索