2012-12-04 290 views
0

问题陈述:我想从例如/ home/A/zip_input哪里会有2个zip文件类似的文件夹解压文件: /家庭/ A/zip_input a_EOD-20121129:对于每个各拉链(基本上一旦拉链完全复制创建.done档案) 像a_EOD-20121129.zip b_EOD-20121129.zip解压缩Zip文件

又会有1对应.done档案.zip.done b_EOD-20121129.zip.done

我在尝试编写脚本以解压缩具有相应.done文件的文件,并将文件移动到位置/ home/b/file_input。在强制移动文件后,我想创建一个带有.done分机的文件。对于eample: 每个拉链是,如a_EOD-20121129.xml/b_EOD-20121129.xml

一个XML文件,因此在输出文件夹会碰到这样的:

a_EOD-20121129.xml a_EOD-20121129。 xml.done b_EOD-20121129.xml b_EOD-20121129.xml.done

我已经试过到目前为止:

for file in $(find . -name "*.zip" -type f) 
do 
    unzip $file -d /home/b/file_input 
    rm $file  
done 

解压缩a.zip/b.zip并创建xml文件。

问题,我面对 -

  1. 如何使病情在脚本中只选择具有相应的.done档案文件?

  2. 如何在文件解压缩和移动后创建相应的.done文件(必须采用文件名并创建一个具有相同名称的文件附加.done)?

回答

1

你可以试试下面的脚本(未测试):

for file in $(find . -name "*.zip" -type f) 
    do 
     if [ -f $file".done" ]; then   #test if there is a done file for that zip 
      unzip $file -d /home/b/file_input 
      for filezip in `unzip -l $file | awk '/.xml$/{print $NF}'`; do #creates the .done files for each file inside the zip 
      touch /home/b/file_input/$filezip".done" 
      done 
      rm $file  
     fi 
    done 
+0

谢谢。哪个命令正在创建.done文件?从逻辑上讲,它应该提取文件名并追加.done权利? – Swagatika

+0

对不起,我编辑了我的答案。 'touch/home/b/file_input/$ filezip“.done”'是为每个提取的文件创建“.done”文件的命令。 – banuj

+0

谢谢你。它正在为etracted文件创建一个.done文件,但同时它还会创建一些不需要的.done文件,如Date.done,file.done,Archive:.done,Time.done等,这些文件不应该有。你能提供任何投入吗? – Swagatika

1

的一种方式(未测试)

for file in $(find . -name "*.zip" -type f) 
do 
    [ -f "${file}.done" ] || continue 
    unzip $file -d /home/b/file_input 
    for file1 in $(unzip -l $file | awk '/.xml$/{print $NF}') 
    do 
     cp /home/b/file_input/$file1 /home/b/file_input/${file1}.done 
    done 
    rm $file  
done 

的检查为.done档案使用-f条件完成。如果它是假的,意味着.done文件不存在,则循环将继续选择下一个文件。 cp命令将从.zip文件创建一个.done文件。

+0

感谢您的答复。 cp $ file $ {file} .done,将会创建一个.zip.done权限,因为您已经在$ zip文件上添加了zip文件了吗?应该将.done添加到提取的.xml文件中,如.xml.done。纠正我,如果我误解了,我是Unix的新手。 – Swagatika

+0

@Swagatika;更新 – Guru

+0

正如我上面所说的,它不会在输出文件夹中添加xml.done文件。另外我怎样才能删除.zip.done文件呢?这将是rm $ {file} .done – Swagatika