12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- #
- # Copyright (c) Contributors to the Open 3D Engine Project.
- # For complete copyright and license terms please see the LICENSE at the root of this distribution.
- #
- # SPDX-License-Identifier: Apache-2.0 OR MIT
- #
- #
- import argparse
- import os
- import sys
- import glob
- import shutil
- def parse_args():
- parser = argparse.ArgumentParser()
- parser.add_argument('-s', '--src-dir', dest='src_dir', required=True, help='Source directory to copy files from, if not specified, current directory is used.')
- parser.add_argument('-r', '--file-regex', dest='file_regex', required=True, help='Globbing pattern used to match file names to copy.')
- parser.add_argument('-t', '--target-dir', dest="target_dir", required=True, help='Target directory to copy files to.')
- args = parser.parse_args()
- if not os.path.isdir(args.src_dir):
- print('ERROR: src_dir is not a valid directory.')
- exit(1)
- return args
- def extended_path(path):
- """
- Maximum Path Length Limitation on Windows is 260 characters, use extended-length path to bypass this limitation
- """
- if sys.platform in ('win32', 'cli') and len(path) >= 260:
- if path.startswith('\\'):
- return r'\\?\UNC\{}'.format(path.lstrip('\\'))
- else:
- return r'\\?\{}'.format(path)
- else:
- return path
- def copy_file(src_dir, file_regex, target_dir):
- if not os.path.isdir(args.target_dir):
- os.makedirs(target_dir)
- for f in glob.glob(os.path.join(src_dir, file_regex), recursive=True):
- if os.path.isfile(f):
- relative_path = os.path.relpath(f, src_dir)
- target_file_path = os.path.join(target_dir, relative_path)
- target_file_dir = os.path.dirname(target_file_path)
- if not os.path.isdir(target_file_dir):
- os.makedirs(target_file_dir)
- shutil.copy2(f, extended_path(target_file_path))
- print(f'{f} -> {target_file_path}')
- if __name__ == "__main__":
- args = parse_args()
- copy_file(args.src_dir, args.file_regex, args.target_dir)
|