最近工作有点忙,学习的时间也少了,为了提高工作效率,有时候我们需要自己写一些提高办公处理效率给的工具或者脚本或者程序。

比如,我目前遇到的一个事项,需要更新很多个tar包文件,把tar包内的某个文件替换为新文件,如果只是几个这样的tar包文件,一个个手工替换下也就行了。

但是如果数量太多了,手工替换就很繁琐,也耗时间,所以为了提高办公效率,写了一个程序脚本,批量自动化处理这批tar包文件。

第一步:列出完成更新操作的所有命令

自己根据实际情况参考修改。

第1步,根据tar包文件名,创建新文件夹
mkdir test 然后,查看当前操作目录文件列表,检查目录是否创建好
ls -lrt
-rw-r--r-- 1 root root 54 12月 10 17:14 os_file.txt
-rw-r--r-- 1 root root 659 12月 10 17:14 test.tar.gz
-rw-r--r-- 1 root root 3088 12月 10 17:17 os_shell.py
drwxr-xr-x 2 root root 4096 12月 10 17:18 test 第2步,解压缩tar文件到新文件夹里
解压缩到指定目录 tar -xzvf test.tar.gz -C /root/test_tar_new/test/ 然后,查看新文件夹文件列表,检查目录是否tar文件解压缩好
ls -lrt /root/test_tar_new/test
总用量 12
-rw-r--r-- 1 root root 365 12月 9 11:42 my_linux_kuaijiejian.txt
-rw-r--r-- 1 root root 384 12月 9 16:15 version.txt
-rw-r--r-- 1 root root 38 12月 10 17:13 os_file.txt 第3步,拷贝更新的文件到到新文件夹里
cp /root/test_tar_new/os_file.txt /root/test_tar_new/test 然后,查看新文件夹文件列表,检查更新的文件是否替换好
ls -lrt /root/test_tar_new/test
总用量 12
-rw-r--r-- 1 root root 365 12月 9 11:42 my_linux_kuaijiejian.txt
-rw-r--r-- 1 root root 384 12月 9 16:15 version.txt
-rw-r--r-- 1 root root 54 12月 10 17:18 os_file.txt 第4步,打包并压缩新文件夹里的文件
cd /root/test_tar_new/test && tar -czvf test_new.tar.gz ./*
./my_linux_kuaijiejian.txt
./os_file.txt
./version.txt 然后,查看新文件夹文件列表,检查新的压缩tar包是否生成
ls -lrt /root/test_tar_new/test
总用量 16
-rw-r--r-- 1 root root 365 12月 9 11:42 my_linux_kuaijiejian.txt
-rw-r--r-- 1 root root 384 12月 9 16:15 version.txt
-rw-r--r-- 1 root root 54 12月 10 17:18 os_file.txt
-rw-r--r-- 1 root root 661 12月 10 17:18 test_new.tar.gz

第二步:编程实现过程

os_shell.py
import os

# 判断不同系统,路径结尾添加路径分隔符
def add_slash(path):
if os.name == 'nt': # Windows系统
return path + '\\'
elif os.name == 'posix': # Linux/Unix系统
return path + '/'
else:
raise ValueError("不支持的操作系统") '''
第1步,根据tar包文件名,创建新文件夹
'''
print('==========1==========')
# 操作总目录
dir_path = '/root/test_tar_new' tarfile_name = "test.tar.gz"
# folder_name = "test"
# 提取文件名,去除文件后缀
folder_name = tarfile_name.split('.')[0]
print(folder_name)
if not os.path.exists(folder_name):
str_shell = 'mkdir ' + folder_name
print(str_shell)
# 执行命令
os.popen(str_shell)
print('第1步,根据tar包文件名,创建新文件夹,', folder_name)
# 新文件夹全路径
folder_path_new = os.path.join(dir_path, folder_name)
print(folder_path_new) '''
第2步,解压缩tar文件到新文件夹里
'''
print('==========2==========')
# 解压缩到指定目录 tar -xzvf test.tar.gz -C /root/test_tar_new/test/
str_shell = 'tar -xzvf ' + tarfile_name + ' -C ' + add_slash(folder_path_new)
print(str_shell)
# 执行命令
rsp = os.popen(str_shell)
print(rsp.read())
print('第2步,解压缩tar文件到新文件夹里')
# 进入新文件夹目录,列表展示文件
str_shell = 'ls -lrt ' + folder_path_new
print(str_shell)
# 执行命令
rsp = os.popen(str_shell)
print(rsp.read()) '''
第3步,拷贝更新的文件到到新文件夹里
'''
print('==========3==========')
os_file_name = 'os_file.txt'
new_file_path = os.path.join(dir_path, os_file_name)
print(new_file_path)
# 拷贝新文件到新目录
str_shell = 'cp ' + new_file_path + ' ' + folder_path_new
print(str_shell)
# 执行命令
os.popen(str_shell)
print('第3步,拷贝更新的文件到到新文件夹里')
# 进入新文件夹目录,列表展示文件
str_shell = 'ls -lrt ' + folder_path_new
print(str_shell)
# 执行命令
rsp = os.popen(str_shell)
print(rsp.read()) '''
第4步,打包并压缩新文件夹里的文件
'''
print('==========4==========')
# tarfile_name_new = "test_new.tar.gz"
tarfile_name_new = folder_name + "_new.tar.gz"
print(tarfile_name_new)
# 打包并压缩新的文件夹
print('打包并压缩新的文件夹,ing')
print(folder_path_new)
'''
多条命令需要使用 && 分隔
执行py脚本目录,与需要执行的tar命令目录不同,
需要先进入新目录下,再执行打包命令.
'''
str_shell = "cd " + folder_path_new + " && " + "tar -czvf " + tarfile_name_new + " ./*"
print(str_shell)
# 执行命令,并输出返回信息
rsp = os.popen(str_shell)
print(rsp.read())
# system执行命令,没有返回
# os.system(str_shell)
print('第4步,打包并压缩新文件夹里的文件')
# 进入新文件夹目录,列表展示文件
str_shell = 'ls -lrt ' + folder_path_new
print(str_shell)
# 执行命令
rsp = os.popen(str_shell)
print(rsp.read())
print('==========end==========')

第三步:放入指定目录运行效果

该目录放入需要处理的tar包文件,可以多个,循环调用上面方法即可,放入需要更新的文件,os_shell.py 程序文件。

办公自动化-批量更新tar包内文件的更多相关文章

  1. nexus批量更新jar包

    nexus批量更新jar包 学习了:https://blog.csdn.net/newtelcom/article/details/54379607 手动进行jar包的拷贝,在维护界面内进行批量更新:

  2. java通过CLASSPATH读取包内文件

    读取包内文件,使用的路径一定是相对的classpath路径,比如a,位于包内,此时可以创建读取a的字节流:InputStream in = ReadFile.class.getResourceAsSt ...

  3. 不解压查看tar.gz包内文件

    通过tar命令备份.解压缩文件,也可在不解压缩文件时查看包内的文件信息. 使用如下参数: tar -ztvf file.tar.gz 将列出所有包内的文件列表,包括目录 -z, --gzip, --g ...

  4. Java实现动态修改Jar包内文件内容

    import java.io.*; import java.util.Enumeration; import java.util.LinkedList; import java.util.List; ...

  5. 用pip批量更新所有包

    p.s在先,事实证明,把电脑里所有的python包一次性更新是吃力不讨好的工作,不过,这是另一回事,如果你一定要这么做,根据http://stackoverflow.com/questions/272 ...

  6. Flex SDK包内文件夹内容说明

    打开SDK目录,让我们看看SDK中都包含了哪些内容: ant包含Flex对Ant的支持库,JAR和Java源码都有,方便我们基于Ant完成对项目的构建 asdoc基于ASDOC我们可以很方便的生成代码 ...

  7. 使用Python批量更新服务器文件【新手必学】

    买了个Linux服务器,Centos系统,装了个宝塔搭建了10个网站,比如有时候要在某个文件上加点代码,就要依次去10个文件改动,虽然宝塔是可视化页面操作,不需要用命令,但是也麻烦,虽然还有git的h ...

  8. 批量更新sql |批量update sql

    图所示现需要批量更新table2表内字段Pwd更新userName对IP地址username与Ip对应关系table1所示 update table2 set pwd=table1.ip from t ...

  9. java无需解压zip压缩包直接读取包内的文件名(含中文)

    java自带了java.util.zip工具可以实现在不解压zip压缩包的情况下读取包内文件的文件名:(注:只能是ZIP格式的,rar我试了不行)代码如下: public static String ...

  10. 批量更新Postgresql的序列

    序列(sequence)是 PostgreSQL 中的一种对象,用于生成自动递增的唯一标识符.通常,序列会与表的自增主键一起使用,以确保每个新插入的行都有一个唯一的标识符.在某些情况下,可能需要更新序 ...

随机推荐

  1. 开源即时通讯IM框架 MobileIMSDK v6.3 发布

    一.更新内容简介 本次更新为次要版本更新,进行了若干优化(更新历史详见:码云 Release Nodes).可能是市面上唯一同时支持 UDP+TCP+WebSocket 三种协议的同类开源IM框架. ...

  2. 怎么在 Linux 下运行 smart_rtmpd

    怎么在 Linux 下运行 smart_rtmpd 操作系统的准备 我们知道比较流行的 Linux 操作系统基本上分为两类,一类是以 Redhat 为基线的 Redhat, CentOS:另一类是 D ...

  3. Solution Set - 多项式杂题

    0. 「OurOJ #46942」/「51nod #1824」染色游戏   Private link & Submission.   首先,显然有 \[f(t)=\sum_{i=0}^t\bi ...

  4. 微服务实战系列(三)-springcloud、springboot及maven之间关系-copy

    1 . 问题描述 随着springboot.springcloud的不断迭代升级,开发效率不断提升,越来越多的开发团队加入到spring的大军中,今天用通俗的语言,介绍下什么是springboot,s ...

  5. mybatis中的数据源和连接池

    1.核心配置文件中配置数据库相关属性 <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE con ...

  6. Golang-容器3

    http://c.biancheng.net/golang/container/ Go语言数组详解 数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成.因为数组的长度是固定 ...

  7. C:条件编译

    问题 #ifdef HELIB_DEBUG long pa, pb; std::vector<long> slots; decryptBinaryNums(slots, a, *dbgKe ...

  8. manim边做边学--交替变换

    今天,我们将介绍 Manim 中两个用于交替变换的动画类:CyclicReplace 和 Swap. 无论是在展示数学概念的动态变化,还是在图形设计中呈现元素的巧妙交互,这两个动画类都扮演着重要角色. ...

  9. WinForm实现无边框窗体的拖动

    一个登录窗体,FormBorderStyle属性设置为None,打开后不能挪动位置,有时候会妨碍使用,有点恶心.网上找了段内容,实现拖动效果: #region 无边框拖动效果,Form被Picture ...

  10. 存储过程专题(Oracle)

    本文转自 https://www.cnblogs.com/lukelook/p/9600407.html,感谢博主 豆豆DE思念 整理分享. 1.Oracle 存储过程基本格式  最简单的版本 is ...