diff -ur v4/bk.py v5/bk.py --- v4/bk.py 2018-06-07 09:50:49.000000000 +0900 +++ v5/bk.py 2018-06-17 22:46:22.000000000 +0900 @@ -13,9 +13,21 @@ exists = lambda path: os.path.exists(path) +def qt(s): + q1 = "'" + q2 = '"' + has1 = q1 in s + has2 = q2 in s + if has1 and has2: + # danger ... + s = s.replace(q2, q1+q1) + if has1: + return '"{}"'.format(s) + return "'{}'".format(s) + def mkdir_if_not(path): if not exists(path): - exec_cmd( "mkdir -p '{}'".format(path) ) + exec_cmd( "mkdir -p {}".format( qt(path) ) ) def yaml_load(fname, def_val): v = def_val @@ -40,7 +52,7 @@ def add_db_if_not(db, path): if path in db: return - s = exec_cmd( "find '{}' -type f -or -type l".format(path) ) + s = exec_cmd( "find {} -type f -or -type l".format( qt(path) ) ) s = s.decode() if not s: return @@ -77,7 +89,7 @@ return (lst, rm_lst) def get_disk_free(path): - s = exec_cmd( "df -k '{}'".format(path) ) + s = exec_cmd( "df -k {}".format( qt(path) ) ) s = s.decode() lst = s.strip().split('\n') lst = list( map( lambda s: s.split(), lst ) ) @@ -92,16 +104,16 @@ i += 1 return str(v) + ( ut[i-1] if i > 0 else '' ) -rm = lambda p, d: exec_cmd( "rm -f '{}'".format( os.path.join(d, p) ) ) +rm = lambda p, d: exec_cmd( "rm -f {}".format( qt( os.path.join(d, p) ) ) ) -tar_cp = lambda p, s, d: exec_cmd( "tar cf - -C '{}' '{}' | tar xf - -C '{}'".format(s, p, d) ) +tar_cp = lambda p, s, d: exec_cmd( "tar cf - -C {} {} | tar xf - -C {}".format( qt(s), qt(p), qt(d) ) ) def cp(p, s, d): (dn, fn) = os.path.split(p) d_dn = os.path.join(d, dn) mkdir_if_not(d_dn) s_p = os.path.join(s, p) - exec_cmd( "cp -p '{}' '{}'".format(s_p, d_dn) ) + exec_cmd( "cp -p {} {}".format( qt(s_p), qt(d_dn) ) ) def backup(db, s, d, lst, rm_lst): db_s = db.get(s, {})