0

問題文: /home/a/zip_input のようなフォルダーからファイルを解凍したいのですが、そこには次のような 2 つの zip ファイルがあります: /home/a/zip_input a_EOD-20121129.zip b_EOD-20121129.zip

また、各 zip に対応する .done ファイルが 1 つあります (基本的に、zip が完全にコピーされると、.done ファイルが作成されます)。

対応する .done ファイルを持つファイルを解凍し、ファイルを場所 /home/b/file_input に移動するスクリプトを作成しようとしています。ファイルが強制的に移動された後、.done ext でファイルを作成したいと思います。例: 各 zip には、a_EOD-20121129.xml/b_EOD-20121129.xml のような 1 つの 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 ファイルに対して行われます。.done ファイルが存在しないことを意味する false の場合、ループは次のファイルの選択を続行します。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 に答える