return paths
+def locate_file(name, case_sensitive=True):
+ if not case_sensitive:
+ return [i for i in sorted(set(dirwalk(cephfs.getcwd().decode('utf-8')))) if name.lower() in i.lower()]
+ else:
+ return [i for i in sorted(set(dirwalk(cephfs.getcwd().decode('utf-8')))) if name in i]
+
+
def get_all_possible_paths(pattern):
paths = []
is_rel_path = not os.path.isabs(pattern)
file_ = open(local_path, 'rb')
stdin = 1
file_size = os.path.getsize(local_path)
- # return
- fd = cephfs.open(to_bytes(remote_path), 'w', 0o666)
+ fd = cephfs.open(to_bytes(remote_path), 'w', 0o666)
if file_size == 0:
return
progress = 0
def copy_to_local(shell, remote_path, local_path):
- local_dir = os.path.dirname(local_path)
- if not os.path.exists(local_dir):
- os.makedirs(local_dir)
fd = None
- if len(remote_path.rsplit('/', 1)) > 2 and remote_path.rsplit('/', 1)[1] == '':
- return
if local_path != '-':
+ local_dir = os.path.dirname(local_path)
+ if not os.path.exists(local_dir):
+ os.makedirs(local_dir)
+ if len(remote_path.rsplit('/', 1)) > 2 and remote_path.rsplit('/', 1)[1] == '':
+ return
fd = open(local_path, 'wb+')
file_ = cephfs.open(to_bytes(remote_path), 'r')
file_size = cephfs.stat(remote_path).st_size
yield fullpath.rsplit('/', 1)[0] + '/'
if is_dir_exists(item.d_name, fullpath.rsplit('/', 1)[0]):
if not len(list_items(fullpath)[2:]):
- yield fullpath
+ yield os.path.normpath(fullpath)
else:
- return dirwalk(fullpath)
+ for x in dirwalk(fullpath):
+ yield x
else:
- yield fullpath
+ yield os.path.normpath(fullpath)
class CephFSShell(Cmd):
root_dst_dir = args.remote_path
if args.local_path == '.':
root_src_dir = os.getcwd()
- if root_dst_dir == '.' and (root_src_dir.count('/') > 0 and root_src_dir[-1] != '/'):
- root_dst_dir = root_src_dir.rsplit('/', 1)[1]
- elif args.remote_path == '.':
- root_dst_dir = cephfs.getcwd().decode('utf-8')
+ if root_dst_dir == '.':
+ root_dst_dir = root_src_dir.rsplit('/',1)[1]
elif root_dst_dir[-1] != '/':
root_dst_dir += '/'
if args.local_path == '-' or os.path.isfile(root_src_dir):
else:
for src_dir, dirs, files in os.walk(root_src_dir):
dst_dir = src_dir.replace(root_src_dir, root_dst_dir, 1)
- if not args.force and dst_dir != '/':
- cephfs.mkdirs(to_bytes(dst_dir), 0o777)
- elif args.force and dst_dir != '/' and not is_dir_exists(dst_dir[:-1]):
+ dst_dir = re.sub('\/+', '/', '/'+ dst_dir)
+ if args.force and dst_dir != '/' and not is_dir_exists(dst_dir[:-1]) and len(locate_file(dst_dir)) == 0:
cephfs.mkdirs(to_bytes(dst_dir), 0o777)
- if not args.force and not is_dir_exists(dst_dir) and not os.path.isfile(root_src_dir) and root_dst_dir != '/':
+ if not args.force and dst_dir != '/' and not is_dir_exists(dst_dir) and not os.path.isfile(root_src_dir):
args.force = True
cephfs.mkdirs(to_bytes(dst_dir), 0o777)
+ for dir_ in dirs:
+ if not is_dir_exists(os.path.join(dst_dir, dir_)):
+ cephfs.mkdirs(to_bytes(os.path.join(dst_dir, dir_)), 0o777)
for file_ in files:
src_file = os.path.join(src_dir, file_)
- dst_file = os.path.join(dst_dir, file_)
+ dst_file = re.sub('\/+', '/', '/'+ dst_dir + '/'+ file_)
if (not args.force) and is_file_exists(dst_file):
return
- copy_from_local(self, src_file, dst_file)
+ copy_from_local(self, src_file, os.path.join(cephfs.getcwd().decode('utf-8'), dst_file))
def complete_get(self, text, line, begidx, endidx):
"""
if args.name[0] == '*':
args.name += '/'
elif args.name[-1] == '*':
- args.name = '/' + args.name
+ args.name = '/'+ args.name
args.name = args.name.replace('*', '')
if args.ignorecase:
- locations = [i for i in sorted(
- set(dirwalk(cephfs.getcwd().decode('utf-8')))) if args.name.lower() in i.lower()]
+ locations = locate_file(args.name, False)
else:
- locations = [i for i in sorted(
- set(dirwalk(cephfs.getcwd().decode('utf-8')))) if args.name in i]
+ locations = locate_file(args.name)
if args.count:
self.poutput(len(locations))
else: