0

我想在 Python 中使用 rsync 递归地计算远程服务器路径中的文件数?我试过这样做:

def find_remote_files(source, password):
    cmdline = ['sshpass', '-p', password, 'rsync', '--recursive', source]
    with open(os.devnull, "w") as devnull:
        proc = subprocess.Popen(cmdline, stdout=subprocess.PIPE, stderr=devnull)
        try:
            for entry in proc.stdout:
                items = entry.strip().split(None, 4)
                if not items[0].startswith("d"):
                    yield lent(items[4])
            proc.wait()
        except:
            # On any exception, terminate process and re-raise exception.
            proc.terminate()
            proc.wait()
            raise

它适用于我的文件较少的情况。但如果我有超过 3000 个文件,rsync 将需要很长时间才能将其存储在列表中并再次计算长度。这就是为什么,我想知道是否有一个rsync命令只是为了计算文件。

4

1 回答 1

2

我会使用一种不同的方法来使用结构,它是执行远程命令的好工具。

from fabric.api import run, env  
env.host_string = 'example.org'
output = run('find /tmp -type f | wc -l')
num_files = int(output)

现在您的变量中有文件数num_files。我只是使用该find命令从 directory 开始递归搜索文件/tmp,并用wc -l.

于 2013-07-09T08:01:39.657 回答