我已经编写了以下脚本,它允许我将src(可以是单个文件或目录)压缩到目标'dst':#!/usr/bin/env python2

import tarfile

from ntpath import basename, dirname

from os import path, listdir, makedirs, chdir

import errno

import sys

class Archivator:

@staticmethod

def compress(src='input/test', dst='output'):

# if not path.isfile(src_file):

# print('Expecting absolute path to file (not directory) as "src". If "src" does contain a file, the file does not exist')

# return False

if not path.isdir(dst):

return False

# try:

# makedirs(dst_dir)

# except OSError as err:

# if err.errno != errno.EEXIST:

# return False

filename = basename(src) if path.isdir(src) else src

tar_file = dst + '/' + filename + '.tar.gz'

print(tar_file)

print(src)

with tarfile.open(tar_file, 'w:gz') as tar:

print('Creating archive "' + tar_file + '"')

# chdir(dirname(dst_dir))

recr = path.isdir(src)

if recr:

print('Source is a directory. Will compress all contents using recursion')

tar.add(src, recursive=recr)

return True

if __name__ == '__main__':

import argparse

parser = argparse.ArgumentParser(description='Uses tar to compress file')

parser.add_argument('-src', '--source', type=str,

help='Absolute path to file (not directory) that will be compressed')

parser.add_argument('-dst', '--destination', type=str, default='output/',

help='Path to output directory. Create archive inside the directory will have the same name as value of "--src" argument')

# Generate configuration

config = parser.parse_args()

Archivator.compress(config.source, config.destination)

对于单个文件,到目前为止我还没有遇到问题。然而,尽管src(作为一个目录)的压缩确实有效(递归和所有),但我注意到一个非常恼人的问题,即完整的目录结构被复制到tar.gz归档文件中。在

示例:

假设我有以下文件结构:

^{pr2}$

使用src = 'updates/package1'和{}我希望得到的归档文件将放在dst内(这行得通)

包含file1和file2

关于第二点./

|---compression.py (script above)

|

|---updates/

| |

| |---package1/

| |

| |---file1

| |---file2

| |---dir/

| |

| |---file3

|

|---compressed/

|

|---package1.tar.gz

|

|---file1

|---file2

|---dir/

|

|---file3

但是我得到了./

|---compression.py (script above)

|

|---updates/

| |

| |---package1/

| |

| |---file1

| |---file2

| |---dir/

| |

| |---file3

|

|---compressed/

|

|---package1.tar.gz

|

|---updates/

|

|---package1/

|

|---file1

|---file2

|---dir/

|

|---file3

我可能无法找到解决方案。我甚至在src(如果是一个目录)中尝试了chdir-ing,但是没有成功。我的一些实验甚至导致了OSError(由于缺少它应该存在的目录)和一个损坏的存档。在

python tar 多目录压缩脚本,使用tarfile(Python)只压缩给定目录中的文件相关推荐

  1. linux shell 里面执行python 程序_Linux下编写脚本Shell和Python的区别?

    思路和算法可以一样,但是语法不一样 例如求1+2+3+4+...,和超过10000停止, shell,c,python实现思路类似. 1.shell实现while循环 #!/bin/sh sum=0 ...

  2. 基于Python SimpleHTTPServer.py的修改脚本:HTTP文件服务器,修正中文目录列表,支持视频文件在线播放

    # -*- coding: gbkimport SimpleHTTPServer import BaseHTTPServer import time import SocketServer impor ...

  3. python和易语言写游戏脚本_用Python写王者荣耀刷金币脚本

    王者荣耀很多朋友都想买脚本和挂之类的,想更加容易的获得金币等可以在游戏里买英雄等,今天我们发挥程序员的优势教给大家用Python语言自己写一个可以刷金币的脚本,以下是全部内容. 王者荣耀的冒险模式里有 ...

  4. python怎么换行继续写脚本_用Python实现换行符转换的脚本的教程

    很简单的一个东西,在'\n'.'\r\n'.'\r'3中换行符之间进行转换. 用法 代码如下: usage: eol_convert.py [-h] [-r] [-m {u,p,w,m,d}] [-k ...

  5. python在线编辑器import_maya_关于脚本编辑器导入python模块

    import sys for p in sys.path: print p rigDir = 'C:\Users\lenovo\Documents\maya\scripts\python\rigLib ...

  6. python取数组最后一个元素_Python Json。只获取json数组中的最后一个元素

    我刚开始尝试python,现在我有点左右为难.在 我试图从一个json文档打印,而我只得到数组中的最后一个元素.在[{ "FullMeasure": "1/2 cup&q ...

  7. python文件移动到文件夹_python – 将文件夹中的文件移动到顶级目录

    我正在尝试为我的工作完成一个清理文件组织系统的脚本.我的脚本的最后一部分需要进入给定目录中的所有文件夹,并将每个文件夹中的所有文件移动到目录中.例如: import os path = 'C:/Use ...

  8. python文件名批量重命名脚本

    python文件名批量重命名脚本 #encoding=utf-8 import cv2 import os import shutilbase_dir = r'文件所在的文件夹路径' SourseDi ...

  9. python解析原理_代码详解:Python虚拟环境的原理及使用

    Python的虚拟环境极大地方便了人们的生活.本指南先介绍虚拟环境的基础知识以及使用方法,然后再深入介绍虚拟环境背后的工作原理. 注意:本指南在macOS Mojave系统上使用最新版本的Python ...

最新文章

  1. 一次redis连接配置修改引发的redis.clients.jedis.exceptions.JedisConnectionException: Unexpected end of stream.异常
  2. COALESCE()、isnull()、nullif()函数的用法
  3. Megacli恢复RAID0磁盘数据
  4. vimb java_vim 中更好的編輯 java 文件.
  5. 【Elasticsearch】我在 Elasticsearch 集群内应该设置多少个分片?
  6. 2020 年告别办公室!
  7. Phoca Gallery Images 去除 logo
  8. 拼多多的知识下乡,都长在希望的田野上
  9. 用把百分数转换成a,b,c,d,e等级
  10. Flutter 实现吹气球动画
  11. 马斯克11天强吞推特,全新商业帝国拼图完成
  12. 唐珂:国外农业物联网技术发展及对我国的启示
  13. 数据集成解决方案探讨
  14. 统计字符串英文字母个数
  15. Hive 分区表 分桶表
  16. 《那年花开月正圆》热播 让人深觉安防重要性
  17. 大学四年看了这18般书籍,我成了别人眼中的程序员大神!
  18. FFmpeg —— 查看NVIDIA显卡对硬件加速的支持
  19. 做PPT用到的实用且免费的网站
  20. 通过分箱对连续特征离散化,以提高线性模型的表现

热门文章

  1. 用emacs做笔记_3种用于记笔记的Emacs模式
  2. raspberry pi_如何使用Raspberry Pi测量颗粒物
  3. iosid不足以修改问题_寻找合作伙伴的技巧足以与您合作
  4. spring mvc 基于表单的认证过程及cookie应用和session管理
  5. HTML fieldset控件
  6. es6 Iterator(迭代器)的概念
  7. python彩票结果分析_天啦噜!Python多线程居然是骗人的?
  8. mlag 堆叠_三分钟了解VRRP、堆叠、M-LAG
  9. 大数据认证为什么学python_大数据为什么需要学python?
  10. 个人用户升级鸿蒙,老用户等到了!鸿蒙升级标准确定,“三岁”以下机型全更新...