2012-12-04 385 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