如何使用rsync统计要同步的文件总数?

How to count the total number of files to be synced using rsync?

我正在尝试使用 'rsync' 读取要同步的文件总数,并使用以下 python 代码读取值,我得到以下输出。我应该修改什么代码以获得 所需的输出

输出

b'10'

期望的输出

10


命令

rsync -nvaz --delete --stats user@host:/www/ . | ./awk.sh

awk.sh

awk '\
BEGIN {count = 0}
  /deleting/ {if ( length() > 0 ) ++count} \
  /Number of regular files transferred: / {count += } \
END \
  {
    printf "%d",count
  }'

Python

subprocess.check_process(cmd, shell=True, stdout=False) 

您的 awk 脚本只是寻找包含字符串的行,然后打印它。由于您的 python 脚本无论如何都需要读取标准输出以获取该值,因此您最好放弃该脚本并坚持使用 python。使用 Popen 对象,您可以逐行读取标准输出

import subprocess

# for test...
source_dir = 'test1/'
target_dir = 'test2/'

count = 0
proc = subprocess.Popen(['rsync', '-nvaz', '--delete', '--stats',
    source_dir, target_dir],
    stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
for line in proc.stdout:
    if line.startswith(b'Number of regular files transferred:'):
        count = int(line.split(b':')[1])
proc.wait()
print(count)

将输出解码为 utf-8,然后使用 RegEx

进行解析
o = subprocess.check_output(cmd, shell=True)
g = re.search(r'count=(\d+)', o.decode("utf-8"), re.M|re.I)