如何使用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)
我正在尝试使用 '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)