0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

カレントディレクトリ以下の全てのzipファイルを解凍するスクリプト

Posted at

カレントディレクトリにあるディレクトリ以下にある全てのzipファイルを一度に解凍するスクリプトを紹介します。
今回紹介するスクリプトもまた前回までに紹介したスクリプトの応用となりますが、折角なので備忘録を含めて掲載したいと思います。

スクリプト本体

# !/bin/sh

PWD=`pwd`
ALLFILES=`pwd`'/'*
FINDDIR=`find $ALLFILES -type d`

for NOWDIR in $FINDDIR;
do
 cd $NOWDIR
 for UNZIPFILE in *.zip; do
  unzip -n $UNZIPFILE && rm -f $UNZIPFILE #必要に応じて
 done
done
cd $PWD

exit 0

解説

PWD変数については、スクリプト実行時のカレントディレクトリへ戻るために定義しています。
ALLFILESやFINDDIRについては前回紹介したスクリプトとほぼ同じ構造ですが、FINDDIRについてはfindのオプション-typedに変更しています。
以降のfindにてループする際の参照対象をファイルではなくディレクトリとしているためです。

for文にはカレントディレクトリに存在しているディレクトリの中身を参照します。
zipファイルを解凍するため、現在参照しているパスへ移動します。
2つめのfor文では現在参照しているディレクトリ内に存在しているzipファイルの数だけループするようになっています。
for文内ではzipファイルの解凍と、元のzipファイルの削除を実施しています。
私が知る限りではunzipコマンドでは解凍後に元のzipファイルの削除するオプションは無いので、unzipが正常に実施されたら対象zipファイルを削除するように後ろにコマンドを追加しています。
元zipファイルを残したい場合は単純に&& rm -f $UNZIPFILEを削るだけです。

ちなみに参照しているディレクトリ内にzipファイルが存在していない場合、unzipコマンドでエラーが返ってきますが、スクリプトの処理自体は継続されます。
また、解凍時に同名ファイルが存在していた場合に強制的に上書きする場合、unzipのオプション-n-oへ変更します。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?