initial commit
This commit is contained in:
Executable
+46
@@ -0,0 +1,46 @@
|
||||
#!/usr/bin/env python3
|
||||
import logging
|
||||
import subprocess
|
||||
import sys
|
||||
import time
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
def find_file_arg(argv: list[str]) -> Path:
|
||||
for it in argv:
|
||||
if it.startswith('-'):
|
||||
continue
|
||||
if Path(it).is_file():
|
||||
return Path(it)
|
||||
|
||||
|
||||
def main():
|
||||
argv = sys.argv[1:]
|
||||
file_path = find_file_arg(argv)
|
||||
if not file_path:
|
||||
logging.error('file argument not passed')
|
||||
return
|
||||
|
||||
size = file_path.stat().st_size
|
||||
while True:
|
||||
args = ['rsync', '--recursive', '--human-readable', '--progress', '--partial', *argv]
|
||||
logging.debug(f'running rsync with {args=}')
|
||||
p = subprocess.run(args)
|
||||
p.check_returncode()
|
||||
|
||||
logging.debug('will check the file size in 20s')
|
||||
time.sleep(20)
|
||||
subprocess.run(['touch', str(file_path)])
|
||||
|
||||
new_size = file_path.stat().st_size
|
||||
|
||||
if new_size == size:
|
||||
logging.info('file size has not changed, stopping')
|
||||
break
|
||||
logging.info(f'file size has changed {new_size - size} bytes, re-syncing')
|
||||
size = new_size
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
main()
|
||||
Reference in New Issue
Block a user