在unix中解压缩具有.done文件的Zip文件

时间:2012-12-04 07:27:03

标签: bash unix unzip

问题陈述:我想从/ home / a / zip_input这样的文件夹中解压缩文件,其中有2个zip文件,如: /家庭/ A / zip_input         a_EOD-20121129.zip         b_EOD-20121129.zip

每个zip也会有1个相应的.done文件(基本上一旦zip被完全复制,就会创建.done文件) 喜欢: a_EOD-20121129.zip.done b_EOD-20121129.zip.done

我正在尝试编写一个脚本来解压缩具有相应.done文件的文件,并将文件移动到某个位置/ home / b / file_input。在强制移动文件后,我想用.done ext创建一个文件。例如: 每个zip都有一个xml文件,如a_EOD-20121129.xml / b_EOD-20121129.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的同名文件)?

2 个答案:

答案 0 :(得分: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

使用-f条件对.done文件进行检查。如果它为false意味着.done文件不存在,则循环将继续选择下一个文件。 cp命令将从.zip文件创建一个.done文件。

答案 1 :(得分: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