0

问题陈述:我想从 /home/a/zip_input 之类的文件夹中解压缩文件,其中将有 2 个 zip 文件,例如: /home/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)?

4

2 回答 2

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 文件。

于 2012-12-04T07:38:27.270 回答
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
于 2012-12-04T07:42:39.260 回答