| #!/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) |