import sys, base64, os, traceback
def Interactive(func):
while True:
print('<-', end = '')
print('->' + func(input()))
def Rename(func, lst):
for f in lst:
try:
nf = func(os.path.basename(f))
print(f + '=>' + nf)
os.rename(f, os.path.join(os.path.dirname(f), nf))
except Exception as e:
traceback.print_exc()
Bind1st = lambda func, arg1: lambda arg2: func(arg1, arg2)
Compose = lambda f, g: lambda x: f(g(x))
Get = lambda func, path: [f for f in map(Bind1st(os.path.join, path), os.listdir(path)) if func(f)]
GetFiles = Bind1st(Get, os.path.isfile)
GetDirectories = Bind1st(Get, os.path.isdir)
GetFilesAndDirectories = Bind1st(Get, lambda x: True)
Encode = lambda data: base64.b64encode(data.encode()).decode().replace('+','.').replace('/','(').replace('=',')')
Decode = lambda data: base64.b64decode(data.replace('.','+').replace('(','/').replace(')','=')).decode()
EncodeFiles = Compose(Bind1st(Rename, Encode), GetFiles)
DecodeFiles = Compose(Bind1st(Rename, Decode), GetFiles)
EncodeDirectories = Compose(Bind1st(Rename, Encode), GetDirectories)
DecodeDirectories = Compose(Bind1st(Rename, Decode), GetDirectories)
EncodeFilesAndDirectories = Compose(Bind1st(Rename, Encode), GetFilesAndDirectories)
DecodeFilesAndDirectories = Compose(Bind1st(Rename, Decode), GetFilesAndDirectories)
def Recursive(func, path):
for d in GetDirectories(path):
Recursive(func, d)
func(path)
EncodeFilesRec = Bind1st(Recursive, EncodeFiles)
DecodeFilesRec = Bind1st(Recursive, DecodeFiles)
EncodeDirectoriesRec = Bind1st(Recursive, EncodeDirectories)
DecodeDirectoriesRec = Bind1st(Recursive, DecodeDirectories)
EncodeFilesAndDirectoriesRecRec = Bind1st(Recursive, EncodeFilesAndDirectories)
DecodeFilesAndDirectoriesRecRec = Bind1st(Recursive, DecodeFilesAndDirectories)
if __name__ == "__main__":
if len(sys.argv) == 2:
Interactive(
{
'es': Encode,
'ds': Decode,
}.get(sys.argv[1]))
elif len(sys.argv) == 3:
{
'ef': EncodeFiles,
'df': DecodeFiles,
'ed': EncodeDirectories,
'dd': DecodeDirectories,
'efd': EncodeFilesAndDirectories,
'dfd': DecodeFilesAndDirectories,
'efr': EncodeFilesRec,
'dfr': DecodeFilesRec,
'edr': EncodeDirectoriesRec,
'ddr': DecodeDirectoriesRec,
'efdr': EncodeFilesAndDirectoriesRecRec,
'dfdr': DecodeFilesAndDirectoriesRecRec,
}.get(sys.argv[1])(sys.argv[2])
else:
sys.exit(1)