解压缩文件并根据条件将内容复制到不同的文件夹

Unzip a file and copy the contents to different folder based on condition

各位,

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

例如:

文件名: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=
unzip $filename

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

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

文件名:unzip.sh

#! /bin/bash
#shopt -s nullglob globstar
filename=""
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

如果 zip 的结构始终相同:

#! /bin/bash
shopt -s nullglob
filename=""
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=""
unzip "$filename"
cp "$(dirname "$filename")"/**/keanu/*.pdf /desti1/
cp "$(dirname "$filename")"/**/reaves/*.pdf /desti2/

这两个脚本都执行您指定的操作,但不会超出指定的范围。解压后的文件被复制过来,也就是说,脚本终止后,原来的解压文件仍然存在。

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)))
  • 迭代存档的内容
  • 过滤掉目录(以“/”结尾)
  • 如果最后一个目录名是 "keanu",select 目的地 1 否则另一个
  • 直接在 selected 目标
  • 下提取