办公自动化-批量更新tar包内文件

2023-12-14 11:29:34

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

比如,我目前遇到的一个事项,需要更新很多个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 程序文件。

文章来源:https://blog.csdn.net/xionghui2007/article/details/134911832
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。