blob: 46ae31f6cd3bbd4bd92b521efeb175c7e7e8d1c5 [file] [log] [blame]
#!/usr/bin/python3
import glob
import os
from shutil import rmtree, move, copy, copytree
from sys import stderr
def append(text, more_text):
if text:
return f'{text}, {more_text}'
return more_text
def print_e(*args, **kwargs):
print(*args, file=stderr, **kwargs)
def touch(filename, times=None):
with open(filename, 'a'):
os.utime(filename, times)
def rm(path):
"""Removes the file or directory tree at the specified path, if it exists.
Args:
path: Path to remove
"""
if os.path.isdir(path):
rmtree(path)
elif os.path.exists(path):
os.remove(path)
def mv(src_path, dst_path):
"""Moves the file or directory tree at the source path to the destination path.
This method does not merge directory contents. If the destination is a directory that already
exists, it will be removed and replaced by the source. If the destination is rooted at a path
that does not exist, it will be created.
Args:
src_path: Source path
dst_path: Destination path
"""
if os.path.exists(dst_path):
rm(dst_path)
if not os.path.exists(os.path.dirname(dst_path)):
os.makedirs(os.path.dirname(dst_path))
for f in (glob.glob(src_path)):
if '*' in dst_path:
dst = os.path.join(os.path.dirname(dst_path), os.path.basename(f))
else:
dst = dst_path
move(f, dst)
def cp(src_path, dst_path):
"""Copies the file or directory tree at the source path to the destination path.
This method does not merge directory contents. If the destination is a directory that already
exists, it will be removed and replaced by the source. If the destination is rooted at a path
that does not exist, it will be created.
Note that the implementation of this method differs from mv, in that it does not handle "*" in
the destination path.
Args:
src_path: Source path
dst_path: Destination path
"""
if os.path.exists(dst_path):
rm(dst_path)
if not os.path.exists(os.path.dirname(dst_path)):
os.makedirs(os.path.dirname(dst_path))
for f in (glob.glob(src_path)):
if os.path.isdir(f):
copytree(f, dst_path)
else:
copy(f, dst_path)