我有一个以前在SVN下的项目,但是现在我要把它移到Mercurial,所以我想清除所有的.SVN文件。在
手工操作有点太大了,所以我决定编写一个python脚本来完成它。但它不起作用。在
def cleandir(dir_path):
print "Cleaning %s\n" % dir_path
toDelete = []
files = os.listdir(dir_path)
for filedir in files:
print "considering %s" % filedir
# continue
if filedir == '.' or filedir == '..':
print "skipping %s" % filedir
continue
path = dir_path + os.sep + filedir
if os.path.isdir(path):
cleandir(path)
else:
print "not dir: %s" % path
if 'svn' in filedir:
toDelete.append(path)
print "Files to be deleted:"
for candidate in toDelete:
print candidate
print "Delete all? [y|n]"
choice = raw_input()
if choice == 'y':
for filedir in toDelete:
if os.path.isdir(filedir):
os.rmdir(filedir)
else:
os.unlink(filedir)
exit()
if __name__ == "__main__":
cleandir(dir)
print语句显示它只“考虑”名称以“.”开头的filedir。但是,如果我取消了continue
语句的注释,那么所有的filedir都将被“考虑”。为什么会这样?在
或者,是否有其他一些已经存在的工具可以递归地反SVN目录树?在
“continue”显示正在考虑的所有文件夹的原因是因为exit()是在函数末尾被调用的。对exit()的调用将在搜索第一个目录后退出Python。如果将其更改为“return”,则函数将被递归调用。在
还有操作系统列表目录不返回“.”或“..”,因此不需要check或任何continue语句。在
:-)
戴维
至少你不应该重新发明递归目录遍历的轮子,而只使用^{} 。在
这并不能回答您的Python问题,但是有一种更简单的方法来完成您想要的操作:
svn export
将在不包含所有.svn目录的情况下在新的位置编写文件树。在相关问题 更多 >
编程相关推荐