linux将文件夹打包为.tar,linux tar命令打包整个文件夹详解

  linux将文件夹打包为.tar,linux tar命令打包整个文件夹详解

  问题说明平台:windows1064位

  eftar_pak(out_filename,source _ dir):ifno tos。路径。exists(source _ dir)3360 sysstdout。写) w )astar:tar。add)source _ dir,OS.path.basename ) source.dir,OS.path.basename ) ) sou

  使用python 3.7 tar文件水手打包时,发现生成的水手包是正常的。

  但是,更换python3.9后,找到打包的文件,解压缩后有@PaxHeader文件。

  查看水手包时,多了一个。目录。在Linux操作系统操作系统上,通常当前目录为【.】,上级目录为【.】。

  python 3.9打出的水手包中包含【本地磁盘】的【.】目录!

  我想删除这个。目录。如果不删除,嵌入式软件解压缩将失败。开始网络搜索,发现大家都没遇到过这个问题!

  查看python tarfile,没有发现任何问题。

  干脆进入目标文件的源文件,找出python3.7和python3.9之间的区别。

  终于发现了问题:

  python 3.7

  默认格式=GNU格式

  python 3.9

  DEFAULT_FORMAT=PAX_FORMAT

  两个版本的包的默认格式不同!

  解决方法1 :

  :C:\Python39\Lib\tarfile.py中的:

  将DEFAULT_FORMAT=PAX_FORMAT更改为默认格式=GNU格式。

  测试表明没问题。这可能是由于窗子平台和Linux操作系统操作系统平台之间的差异,Linux平台的当前目录【.】和上级目录【.】较多。如果tarfile.add函数是递归打包的,则当前目录【.】也包含在水手包中。

  :使用默认格式=GNU格式可以解决此问题。

  【我不推荐你改变那么多。你可以用第二种方法!】

  解决方法2 :

  使用目标文件打开后,设置格式目标文件.GNU_FORMAT

  tar.format=tarfile .GNU_FORMAT

  ef make _ tar _ package(out _ filename,source_dir,tar _ type):ifnotos。路径。exists)source _ dir 3365292;tar _ type)astar:tar。格式=tar文件.GNU _ format # format tat OS。路径。basename(source _ dir))deftar _ pak \ n (returnwithtarfile)。open(out _ filename, w ) astar : tar.format=tarfile .GNU _ format # format tar.ar)

  importsimportsysimporttarfiletar _ system _ dir _ name= system tar _ user _ dir _ name= user tar _ default _ tar _ type(:ifno tos。路径。exists(source _ dir)3360 sysstdout。写([tar。err]sourcer \ n )tar _ type)astar:tar。格式=tar文件.GNU _ format tar。添加操作系统。路径。basename(source _ dir))deftar _ pak \ n (returnwithtarfile)。open(out _ filename, w ) astar : tar.format=tarfile .GNU _ format tar。添加)酸mat OS。路径。基本名称(源目录))高级路径定义获取获取(/) ) )当前路径def获取当前路径):返回os.getcwd).替换((\)、(/)main函数条目if _ _ \ n ) #文件夹初始化iflen(系统。argv)=2:_ source _ dir=sys。argv[1]sys。stdout。write([tar]sourcedirectorectore n )if len(sys。argv)=3:_ tar _ format= w: sys。argv[2]sys。stdout。write()tartype 33333= :system _ src _ dir=OS。路径。join(get _ current _ path),)_ source _ dir(/ tar _ sth)/)system _ tar _ filename=OS。路径.重播我/(user _ src _ dir=OS。路径。join(获取当前路径),tar用户目录名.replace())))652 tar _ system _ dir _ name tar _ default _ type).替换))用户_焦油_文件名=操作系统。路径。join ame tar _ user _ dir _ name tar _ default _ type).替换(()、())ifos。路径。exists)system _ src _ dir system _ src _ dir(sys。stdout。写([tar。file] system _ src _ dir)n)else:sys。stdout。写([tar。file]找不到目录: system _ src _ dir())。伊佛斯.路径。exists(user _ src _ dir):tar _ pak)user _ tar _ filename,user _ src _ dir(sys。stdou pak n )else:sys。stdout。写([tar。file]找不到目录: user _ src _ dir \ n ). sys。stdout。写)\ n’)效果

  总结一下python的问题,在版本对比中,可以通过查python API手册找到更深入的分析方法。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • windows下cmd中切换路径与目录查看,cmd怎么切换路径到文件夹
  • windows下cmd中切换路径与目录查看,cmd怎么切换路径到文件夹,cmd命令打开及切换目录路径的实现
  • wget下载文件到指定目录,wget下载整个文件夹
  • wget下载文件到指定目录,wget下载整个文件夹,wget下载整个网站(整个子目录)或特定目录
  • u盘exe病毒如何根除,如何根除U盘文件夹exe病毒
  • u盘exe病毒如何根除,如何根除U盘文件夹exe病毒,U.EXE病毒删除方法
  • svn在eclipse中的使用,eclipse不显示svn路径,Eclipse设置svn忽略文件或文件夹(svn-ignore)的操作
  • Linux系统删除文件夹命令,linux系统中删除文件的命令
  • Linux系统删除文件夹命令,linux系统中删除文件的命令,Linux系统删除文件夹和文件的命令
  • jsp 上传文件夹,jsp多文件上传
  • jsp 上传文件夹,jsp多文件上传,JSP组件commons-fileupload实现文件上传
  • dos 删除文件夹命令,dos 删除文件夹 目录不是空的
  • dos 删除文件夹命令,dos 删除文件夹 目录不是空的,dos 删除文件夹 rd
  • Win10共享文件夹怎么设置访问密码,win10共享文件夹设置密码后没有权限访问
  • win10用户的文件名怎么改,window10怎样更改用户文件夹名称
  • 留言与评论(共有 条评论)
       
    验证码: