我刚开始学python,有一个问题。
如何创建脚本来执行以下操作:(将在bash中编写我的脚本)
将<file>.gz
从远程服务器1复制到本地存储。
cp /dumps/server1/file1.gz /local/
然后在本地提取该文件。
gunzip /local/file1.gz
然后将提取文件复制到远程服务器2(用于存档和重复数据消除)
cp /local/file1.dump /dedupmount
删除.gz文件的本地副本以释放“临时”存储空间
rm -rf /local/file1.gz
我需要对所有文件进行循环运行。 所有文件和目录都安装在同一服务器上的NFS。
for循环遍历/dump/
文件夹并查找.gz
文件。
每个.gz
文件将首先复制到/local
目录,然后在那里提取。
解压缩后的.dmp
文件将复制到/dedupmount
文件夹中存档。
只是把头撞在墙上怎么写。
您可以使用urlopen模块
现在您可以使用gunzip utitlty来提取,使用os.system
Python解决方案
虽然shell代码可能更短,但整个过程可以在python中以本机方式完成。python解决方案的关键点是:
使用
gzip
模块,gzip文件和普通文件一样容易读取。要获取源文件列表,使用
glob
模块。它是根据shell glob特性建模的。要操作路径,请使用python
os.path
模块。它为文件系统提供了一个与操作系统无关的接口。下面是示例代码:
此代码从remote1服务器读取并写入remote2服务器。这不需要本地副本,除非您需要。
在这段代码中,所有解压都是由本地计算机上的CPU完成的。
外壳代码
为了进行比较,下面是等效的shell代码:
三步Python代码
这种稍微复杂一点的方法实现了OP的三步算法,该算法使用本地计算机上的临时文件:
这会将源文件复制到本地计算机上的一个临时文件
tmpfile
,然后将其从那里gunzips到目标文件。tmpfile
将被此脚本的每次调用覆盖。临时文件可能是一个安全问题。要避免这种情况,请将临时文件放在一个目录中,该目录只能由运行此脚本的用户写入。
相关问题 更多 >
编程相关推荐