首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使递归重命名操作(Linux,使用python)可逆?

问如何使递归重命名操作(Linux,使用python)可逆?
EN

Stack Overflow用户
提问于 2013-03-17 16:43:06
回答 3查看 306关注 0票数 1

如何使递归重命名操作(Linux,使用python)可逆?

我想写一个程序在Linux下使用python,这个程序做这个工作:批量递归重命名文件夹中的所有文件,如果文件名有子字符串X,重命名为Y,例如:将markdown重命名为md,github.markdown将重命名为github.md。

困难的部分是如何使操作可逆?如果我想改回文件名。示例:将github.md改回github.markdown。

如何设计程序并保持简单,使用什么算法和数据结构?

EN

回答 3

Stack Overflow用户

发布于 2013-03-17 16:49:02

将原始文件名和重命名后的文件名保存到一个文件中,有什么更好的方法吗?

我认为这是最健壮的方法。即使重命名是有损的(例如,如果您不能仅通过查看重命名的文件名来重建原始文件名或位置),它也会工作。

也就是说,既然您使用的是Linux,为什么不简单地symlink这些文件,使它们可以使用另一组名称进行访问呢?在Python语言中,这可以使用os.symlink()来完成。

票数 2
EN

Stack Overflow用户

发布于 2013-03-17 17:50:38

如果出现错误或异常,我认为您想要反转整个操作。

根据具体情况,我将使用两种可能的方法:

1)使用后进先出队列(类Queue.LifoQueue)。

在每个操作完成后,对LIFO队列执行put()。

如果出现错误或异常,只需get()即可。

一些示例代码:

代码语言:javascript
复制
import os, Queue.LifoQueue

stack = Queue.LifoQueue()
from = 'original.txt'
to = 'new.txt'
if os.system('mv %s %s' % (from, to)) == 0: # execute operation
    stack.put('mv %s %s' % (to, from)) # save reverse operation

os.system(stack.get()) # execute reverse operation

2)“先试后买”

如果有一种方法可以模拟操作,然后模拟所有操作,如果它们有效,则执行所有操作,不需要反转任何东西。

票数 0
EN

Stack Overflow用户

发布于 2013-03-17 18:19:11

您应该考虑使用revision control system。这样,所有的更改都可以注册和撤消。有many different programs可供选择。

如果你的目录只包含文本文件,你可以使用古老的RCS。就我个人而言,我非常喜欢git,因为像RCS一样,版本信息包含在受修订控制的目录中。git的优点是它还可以处理二进制文件,并且可以处理移动和重命名。像CVS和Subversion这样的替代方案通常需要您设置一个存储库。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15458983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档