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

Python 解压文件并根据条件将内容复制到不同的文件夹,python,bash,shell,find,cut,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> f

各位

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

例如:

文件名: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
unzip.sh
文件名=$1
解压缩$filename
//我卡在这里,我需要去解压文件夹,找到路径,并复制这些文件到不同的目的地

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

文件名: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
#/bin/bash
#shopt-s nullglob globstar
filename=“$1”

var1=$(sed's/\{4\}$/'如果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/

这两个脚本都执行您指定的操作,但仅此而已。解压后的文件将被复制,也就是说,在脚本终止后,原始解压文件仍将保留。

如果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/
两个脚本都执行您指定的操作,但仅此而已。解压后的文件将被复制,也就是说,在脚本终止后,原始解压文件仍将保留。

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)))
  • 迭代存档的内容
  • 筛选出目录(以“/”结尾)
  • 如果last dirname是
    “keanu”
    ,请选择目的地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)))
  • 迭代存档的内容
  • 筛选出目录(以“/”结尾)
  • 如果last dirname是
    “keanu”
    ,请选择目的地1,否则选择另一个
  • 直接在所选目标下提取

选择你的武器:bash或python。任何东西都可以@Jean-François Fabrichose使用你的武器:bash或python。任何东西都可以@Jean-François Fabrithanks a ton@Socowi