清除svn信息文件的python代码
写了一个简单的脚本来清除.svn文件夹。从svn代码仓库得到的源代码,在每一个目录及了目录下都有一个名为.svn文件夹。当想将svn下载的代码导入到其它project中时,就需要将svn相关信息文件删除掉,得到一份干净的代码。如下注事点:
1.遍历目录及子目录,如果发现有名为.svn的文件夹,就将它删除。os.path.walk()来遍历目录,os.remove(path)删除文件,os.rmdir(path)删除文件夹。
2. 在删除文件之前,需要去掉只读属性:os.chmod(path, st_mode | stat.S_IWRITE | stat.S_IWGRP | stat.S_IWOTH)
# script to clean .svn folderimport os, os.pathimport statBASE_FOLDER = r'C:\Development\workspace-3.6\ESI_back'class Walker():def __init__(self, begin_path, rm_name):self.begin_path = begin_pathself.rm_name = rm_namedef going(self):os.path.walk(self.begin_path, self.visit, self.rm_name)def visit(self, arg, dirname, names):#if os.path.isabs(dirname):#print 'absolute pathname: ', dirnamefor e in names:abs = os.path.join(dirname, e)if e == arg and os.path.isdir(abs):#print "Removing: ", absself.rm_force(abs)#print "done"def rm_force(self, path):if os.path.lexists(path):#if path is readonly, should remove "readonly"self.un_readonly(path)if os.path.isfile(path):print 'Removing file: ', pathos.remove(path)elif os.path.isdir(path):names = os.listdir(path)for name in names:abs = os.path.join(path, name)self.rm_force(abs)print 'Removing folder: ', pathos.rmdir(path)else:os.unlink(path)else:print 'NOT EXISTS: ', pathdef is_readonly(self, path):st_mode = os.stat(path).st_mode#return st_mode == 33060return st_mode & stat.S_IWRITE != stat.S_IWRITEdef un_readonly(self, path):st_mode = os.stat(path).st_modeos.chmod(path, st_mode | stat.S_IWRITE | stat.S_IWGRP | stat.S_IWOTH) #146#os.chmod(path, 33206)if __name__ == '__main__':if not os.path.isdir(BASE_FOLDER):print 'Not a folder: ', BASE_FOLDERexitwalker = Walker(BASE_FOLDER, '.svn')#f = r't/t.txt'#print walker.is_readonly(f)#walker.un_readonly(f)#print walker.is_readonly(f)#walker.rm_force('C:\\TEMP\\zhouvi2')walker.going()
页:
[1]