mirror of
https://github.com/rwinkhart/sshyp.git
synced 2026-08-28 21:06:34 -04:00
Partial fix for data loss (syncing temporarily disabled)
This commit is contained in:
Executable
+70
@@ -0,0 +1,70 @@
|
||||
#!/usr/bin/python3
|
||||
|
||||
# sshync 2021.10.12.unreleased1
|
||||
|
||||
# sshync is a wrapper around sftp that functions as a Python library alternative to scp
|
||||
# openssh (on POSIX compliant Unix) is required
|
||||
|
||||
# sshync will always overwrite the older files with the newer files, regardless of all other conditions
|
||||
# ^the age is determined by the date and time of the last modification to the files
|
||||
|
||||
# syncing via sshync is always done recursively
|
||||
|
||||
# external modules
|
||||
|
||||
from os.path import getmtime
|
||||
from subprocess import getoutput as term_output
|
||||
|
||||
|
||||
# internal modules
|
||||
|
||||
|
||||
def make_profile(profile_dir, local_dir, remote_dir, identity, ip, port, user):
|
||||
open(profile_dir, 'w').write(user + '\n' + ip + '\n' + port + '\n' + local_dir + '\n' + remote_dir + '\n' + identity
|
||||
+ '\n\n\n')
|
||||
|
||||
|
||||
def make_sentinel_profile(profile_dir, local_dir, remote_dir, identity, ip, port, user, local_sentinel, rem_sentinel):
|
||||
open(profile_dir, 'w').write(user + '\n' + ip + '\n' + port + '\n' + local_dir + '\n' + remote_dir + '\n' + identity
|
||||
+ '\n' + local_sentinel + '\n' + rem_sentinel + '\n')
|
||||
|
||||
|
||||
def get_profile(profile_dir):
|
||||
try:
|
||||
profile_data = open(profile_dir).readlines()
|
||||
except (FileNotFoundError, IndexError):
|
||||
profile_data = 0
|
||||
return profile_data
|
||||
|
||||
|
||||
def run_profile(profile_dir):
|
||||
# import profile data
|
||||
profile_data = get_profile(profile_dir)
|
||||
user = profile_data[0].replace('\n', '')
|
||||
ip = profile_data[1].replace('\n', '')
|
||||
port = profile_data[2].replace('\n', '')
|
||||
local_dir = profile_data[3].replace('\n', '')
|
||||
remote_dir = profile_data[4].replace('\n', '')
|
||||
identity = profile_data[5].replace('\n', '')
|
||||
local_sentinel = profile_data[6].replace('\n', '')
|
||||
rem_sentinel = profile_data[7].replace('\n', '')
|
||||
# get file modification times
|
||||
if local_sentinel == '':
|
||||
local_modification_time = getmtime(local_dir)
|
||||
remote_modification_time = float(
|
||||
term_output("ssh -i " + "'" + identity + "'" + " -p " + port + " " + user + "@" +
|
||||
ip + " \"python -c 'from os.path import getmtime; mod_time = "
|
||||
"(getmtime(" + '\\"' + remote_dir + '\\"' + ")); print(mod_time);"
|
||||
"'" + "\""))
|
||||
else:
|
||||
local_modification_time = getmtime(local_sentinel)
|
||||
remote_modification_time = float(
|
||||
term_output("ssh -i " + "'" + identity + "'" + " -p " + port + " " + user + "@" +
|
||||
ip + " \"python -c 'from os.path import getmtime; mod_time = "
|
||||
"(getmtime(" + '\\"' + rem_sentinel + '\\"' + ")); print(mod_time);"
|
||||
"'" + "\""))
|
||||
# compare file modification times
|
||||
if local_modification_time > remote_modification_time:
|
||||
print('\nLocal is newer, uploading...\n') # upload
|
||||
else:
|
||||
print('\nRemote is newer, downloading...\n') # download
|
||||
Reference in New Issue
Block a user