文件夹和数据库备份 - Python

2 投票
4 回答
868 浏览
提问于 2025-04-15 20:47

我觉得这个问题有点复杂,

我有很多文件夹,里面有我想要备份的项目,我希望把它们打包成一个zip或tar文件,但我想避免备份像pyc文件和临时文件这样的东西。

我还有一个需要备份的Postgres数据库。


有没有什么建议可以让我用Python脚本来完成这个操作呢?

另外,有没有办法让这个过程不占用太多资源呢?


非常感谢大家的帮助。

4 个回答

1

现在的多核CPU让我们发现,CPU并不是性能瓶颈。更常见的情况是,磁盘的读写速度(也就是磁盘I/O)需要更好的管理。

在Linux系统中,有一个叫做ionice的命令,可以帮助你控制这个问题。

ionice(1)

名称

   ionice - get/set program io scheduling class and priority

使用方法

   ionice [[-c class] [-n classdata ] [-t]] -p PID [PID ...]

   ionice [-c class] [-n classdata ] [-t] COMMAND [ARG ...]

描述
这个程序可以设置或获取一个程序的I/O调度类别和优先级。如果没有提供任何参数,或者只提供了-p,ionice会查询当前进程的I/O调度类别和优先级。

2

在Linux系统中,你可以使用tar命令,并加上--exclude这个选项来排除一些文件。比如说,如果你想排除你的.pyc文件和临时文件(在这个例子中是.tmp文件),可以这样做:

$ tar zcvf backup.tar.gz --exclude "*.tmp" --exclude "*.pyc"

另外,你还可以使用z选项来把文件压缩成一个压缩包。

4

如果你在使用Linux(或者其他类似Unix的系统,比如MacOSX),有一个简单的方法可以降低一个程序的优先级——这样的话,如果其他程序需要CPU资源,它就会消耗更少的CPU。这可以通过使用nice命令来实现。在Python中(同样适用于这些操作系统),你可以使用os.nice来让你的程序“变得更友好”(也就是降低优先级等)。

如果你想备份一个PostgreSQL数据库,我推荐使用PostgreSQL自带的工具。至于压缩一个文件夹,除了.pyc文件(还有临时文件——你可以用你自己的方法来识别这些文件),Python也非常合适。比如:

>>> os.chdir('/tmp/az')
>>> f = open('/tmp/a.zip', 'wb')
>>> z = zipfile.ZipFile(f, 'w')
>>> for root, dirs, files in os.walk('.'):
...   for fn in files:
...     if fn.endswith('.pyc'): continue
...     fp = os.path.join(root, fn)
...     z.write(fp)
... 
>>> z.close()
>>> f.close()
>>> 

这段代码会压缩指定文件夹中的所有文件,除了那些以.pyc结尾的文件(不进行压缩——如果你想要压缩,可以在zipfile.ZipFile调用中添加第三个参数zipfile.ZIP_DEFLATED)。这真是太简单了。

撰写回答