如何使递归重命名操作(Linux,使用python)可逆?
我想在Linux下编写一个程序并使用python,这个程序完成这个工作:批处理递归重命名文件夹中的所有文件,如果文件名有子串X,重命名为Y,例如:将标记重命名为md,github。 markdown将被重命名为github.md。
困难的部分是如何使操作可逆?如果我想要更改文件名。示例:将github.md更改回github.markdown。
如何设计程序并保持简单,使用什么算法和数据结构?
答案 0 :(得分:2)
将原始文件名和重命名的文件名保存到文件中,有更好的方法吗?
我认为这是最强大的方法。即使重命名是有损的(即如果你只是通过查看重命名的文件名无法重建原始文件名或位置),它也会工作。
那就是说,既然你正在使用Linux,为什么不只是symlink文件使它们可以在另一组名称下访问?在Python中,可以使用os.symlink()
完成此操作。
答案 1 :(得分:0)
如果出现错误或异常,我想你想要反转整个操作。
我会使用两种可能的方法,具体取决于具体情况:
1)使用LIFO队列(类Queue.LifoQueue)。
每次操作完成后,对LIFO队列执行put()。
如果有错误或异常,只需get()。
一些示例代码:
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)“在购买之前先试试”
如果有一种模拟操作的方法,那么将它们全部模拟,如果它们有效,则全部执行它们,不需要反转任何内容。
答案 2 :(得分:0)
您应该考虑使用revision control system。这样,所有更改都可以注册和注销。有many different programs可供选择。
如果您的目录仅包含文本文件,则可以使用古老的RCS。我个人非常喜欢git,因为像RCS一样,版本信息包含在受版本控制的目录中。 git的优点是它还可以处理二进制文件,并可以处理移动和重命名。像CVS和Subversion这样的替代方案通常要求您设置存储库。