#! /usr/bin/env python3# mkreal## turn a symlink to a directory into a real directoryimport sysimport osfrom stat import *join = os.path.joinerror = 'mkreal error'BUFSIZE = 32*1024def mkrealfile(name):st = os.stat(name) # Get the modemode = S_IMODE(st[ST_MODE])linkto = os.readlink(name) # Make sure again it's a symlinkf_in = open(name, 'r') # This ensures it's a fileos.unlink(name)f_out = open(name, 'w')while 1:buf = f_in.read(BUFSIZE)if not buf: breakf_out.write(buf)del f_out # Flush data to disk before changing modeos.chmod(name, mode)def mkrealdir(name):st = os.stat(name) # Get the modemode = S_IMODE(st[ST_MODE])linkto = os.readlink(name)files = os.listdir(name)os.unlink(name)os.mkdir(name, mode)os.chmod(name, mode)linkto = join(os.pardir, linkto)#for filename in files:if filename not in (os.curdir, os.pardir):os.symlink(join(linkto, filename), join(name, filename))def main():sys.stdout = sys.stderrprogname = os.path.basename(sys.argv[0])if progname == '-c': progname = 'mkreal'args = sys.argv[1:]if not args:print('usage:', progname, 'path ...')sys.exit(2)status = 0for name in args:if not os.path.islink(name):print(progname+':', name+':', 'not a symlink')status = 1else:if os.path.isdir(name):mkrealdir(name)else:mkrealfile(name)sys.exit(status)if __name__ == '__main__':main()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。