解压缩文件并根据条件

时间:2017-03-08 20:25:10

标签: python bash shell find cut

民间,

我需要解压缩文件并将解压缩文件的子目录内容复制到不同的位置

例如:

文件名:temp.zip

解压缩temp.zip

我们在temp

下有这样的文件夹结构
 temp/usr/data/keanu/*.pdf's
 temp/usr/data/reaves/*.pdf's

我的要求是转到解压缩的文件夹并复制

/keanu *.pdf's to /desti1/
and 
/reaves/*.pdf's to /dest2/

我试过以下内容:

unzip.sh <filename>

filename=$1
unzip $filename

//我已经卡在这里我需要去解压缩文件夹找到路径并将这些文件复制到不同的目的地

我的脚本上的UPDATE解压缩文件并递归复制推荐类型的文件到目标文件夹而不更改(通过保留目录结构)

文件名:unzip.sh

#! /bin/bash
#shopt -s nullglob globstar
filename="$1"
var1=$(sed 's/.\{4\}$//' <<< "$filename")
echo $var1
unzip "$filename"
cd "$(dirname "$filename")"/"$var1"/**/includes
#pwd
#use -udm in cpio to overwrite
find . -name '*.pdf' | cpio -pdm /tmp/test/includes
cd -
cd "$(dirname "$filename")"/"$var1"/**/global
#pwd
find . -name '*.pdf' | cpio -pdm /tmp/test/global

2 个答案:

答案 0 :(得分:1)

如果zip的结构始终相同:

#! /bin/bash
shopt -s nullglob
filename="$1"
unzip "$filename"
cp "$(dirname "$filename")"/temp/usr/data/keanu/*.pdf /desti1/
cp "$(dirname "$filename")"/temp/usr/data/reaves/*.pdf /desti2/

如果结构发生变化,您只知道某处有keanu/reaves/目录:

#! /bin/bash
shopt -s nullglob globstar
filename="$1"
unzip "$filename"
cp "$(dirname "$filename")"/**/keanu/*.pdf /desti1/
cp "$(dirname "$filename")"/**/reaves/*.pdf /desti2/

两个脚本都按照您的指定执行,但不超过此。解压缩的文件被复制,也就是说,脚本终止后原始的解压缩文件仍会存在。

答案 1 :(得分:1)

Python解决方案:

import zipfile,os

zf = zipfile.ZipFile("temp.zip")
for f in zf.namelist():
    if not f.endswith("/"):
        dest = "dest1" if os.path.basename(os.path.dirname(f))=="keanu" else "dest2"
        zf.extract(f,path=os.path.join(dest,os.path.basename(f)))
  • 迭代存档的内容
  • 过滤目录(以&#34; /&#34;结束)
  • 如果最后一个dirname为"keanu",请选择目标1,否则选择其他
  • 直接在所选目的地下提取