2014-03-05 57 views
-1

我想设计一个循环,实现了很多我之前见过的单个元素,并且这个组合将我抛弃。基本上,我有这样的结构:从一个目录解压缩到个人目录的环路

/bin/script.sh 
/conf/patches/1.zip 
/conf/patches/2.zip 
/conf/patches/3.zip 
/sharedir 

我想要一个循环,将经过然而,许多补丁我在/ conf目录/补丁,解压每个补丁进/ SHAREDIR一个单独的目录。每个目录应该被命名为文件的名称。

什么,我至今想是:

for file in '../conf/patches/*.zip' 
do 
    unzip "${file%%.zip}" -d /sharedir/$file 
done 

正如你可以看到... ...肯定是有什么我在这个组合遗漏。从glob模式

回答

1

试试这个:

for file in /conf/patches/*.zip 
do 
    f="${file##*/}" 
    mkdir -p "/sharedir/${f%.zip}" 
    unzip -d "/sharedir/${f%.zip}" "${file}" 
done 
1

删除引号,否则没有展开:

for file in ../conf/patches/*.zip 
do 
    unzip "${file%%.zip}" -d /sharedir/ 
done 

编辑:您可以尝试

for f in ../conf/patches/*.zip; do 
    echo g="${f%%/*}" 
    unzip -d "sharedir/${g%*.zip}" "$f" 
done 
+0

checkdir:无法创建提取目录:/sharedir/../conf/patches/1.zip 这是我收到的错误。我相信这是我的问题。当它通过zip文件时,它实际上通过利用整个路径以及文件名来创建“文件”名称。似乎没有放弃这条道路。 –

+0

现在就试试吧,我相信它应该可以工作。 – anubhava

+0

它现在确实运行,但它不会创建要解压缩到的目录。它只是将它解压到/ sharedir /我希望它也为每个压缩文件创建目录,然后解压缩到每个压缩文件中。即/ sharedir/1/unzipcontentsfrom1;等 –