файлы comapare, находящиеся в удаленном каталоге и локальном каталоге с использованием python - PullRequest
1 голос
/ 27 мая 2019

Я получил код на этом сайте для загрузки файлов из удаленного каталога с сервера.Теперь я хочу изменить этот код, чтобы он сравнивал файлы и списки, которые находятся в удаленном каталоге, а не в локальном каталоге.В нем перечислены необычные файлы между удаленным каталогом и локальным каталогом.Это возможно?Пожалуйста помоги.Заранее спасибо

import os
import pysftp
import socket
from stat import S_IMODE, S_ISDIR, S_ISREG

cnopts = pysftp.CnOpts()
cnopts.hostkeys = None

IP = "192.168.X.X"
myUsername = "user"
port = 22
myPassword = "password"

try:
    with pysftp.Connection(host=IP, username=myUsername, password=myPassword, cnopts=cnopts) as sftp:
        try:
            r=str(socket.gethostbyaddr(IP))
            print("connection successful with "+r)


            def get_r_portable(sftp, remotedir, localdir, preserve_mtime=False):
                for entry in sftp.listdir(remotedir):
                    remotepath = remotedir + "/" + entry
                    localpath = os.path.join(localdir, entry)
                    mode = sftp.stat(remotepath).st_mode
                    if S_ISDIR(mode):
                        try:
                            os.mkdir(localpath, mode=777)
                        except OSError:
                            pass
                        get_r_portable(sftp, remotepath, localpath, preserve_mtime)
                    elif S_ISREG(mode):
                        sftp.get(remotepath, localpath, preserve_mtime=preserve_mtime)


            remote_path = input("enter the remote_path: ")
            local_path = input("enter the local_path: ")

            get_r_portable(sftp, remote_path, local_path, preserve_mtime=False)
        except socket.herror:
            print("Unknown host")
except:
    print("connection failed")

Результатом должны быть необычные файлы, которые присутствуют в удаленном каталоге, а не в локальном каталоге.

Ответы [ 2 ]

0 голосов
/ 27 мая 2019
def getFilesList(path):
files = []
for (dirpath, dirnames, filenames) in os.walk(path):
    files.extend(filenames)
    return files
ServerFiles = getFilesList(Srverpath)
LocalFiles = getFilesList(Lclpath) 
fileDiffList = []
for file in ServerFiles: 
    if file in LocalFiles: 
        pass 
    else:
        fileDiffList.append(file) 

Мы можем получить необычные файлы, используя 2 отдельных списка. Вызовите метод getFilesList дважды, передав путь к вашему серверу и локальный путь к файлу. В конце ваш 'fileDiffList' будет иметь имена файлов

0 голосов
/ 27 мая 2019

Если вы хотите загрузить новые файлы и файлы, которых нет в вашей локальной системе, используйте rsync.Вы можете синхронизировать локальный каталог с удаленным, как показано ниже:

rsync -a ~/dir1 username@remote_host:destination_directory

Как использовать его в python:

import subprocess

args = ["rsync", "-av", "-e", "ssh", "user@server:/tmp/", "/home/local/Desktop/"]
subprocess.call(args)

Вы можете передать ключ --password-file, и он должен указывать наФайл содержит пароли SSH, или вы можете использовать ключ SSH.

...