名前シェルスクリプトでネストされた.zipファイルを解凍する

名前シェルスクリプトでネストされた.zipファイルを解凍する

いくつかのファイルを選択すると、非常に深くネストされた構造を持つzipファイルをダウンロードしています。ファイル構造は次のとおりです。

myfile.zip/
C*_01.zip, ....., C*_xx.zip/

各 C*_xx.zip ファイルから:

a*.zip
b*.zip
..../
file1.txt
file2.txt
...
targetfile.txt
...

各「C * .zip」でターゲットファイルを選択する必要があることに注意してください。

私はシェルスクリプトの経験が少なく、他のソリューションに基づいてスクリプトを書いたが、うまくいきませんでした。どんなアドバイスにも感謝します。

wget url | find . -name "myfile.zip" | while ["`find -type f -name 'C*.zip' | wc -l`" -gt 0 ]; do find -type f -name "b.zip" | find -type f -name "targetfile.txt" exec unzip -- '{}' \;; done

答え1

同様のスクリプトファイルを生成fetchtarget.shし、URLを最初のパラメータとして使用して実行します。

#!/bin/sh

dir=$(mktemp -d)
cd $dir || exit

wget $1

# deep unzip loop
while true; do
   find -iname '*.zip' > zipindex
   test -s zipindex || break
   for zip in $(cat zipindex); do unzip -o $zip && rm $zip; done
done

# purge and show result
find $dir -name targetfile.txt -print -or -type f -exec rm {} \; 

関連情報