web-dev-qa-db-ja.com

ディレクトリ内のすべてのファイルを解凍する

Zipファイルのディレクトリがあります(Windowsマシンで作成)。 unzip filenameを使用して手動で解凍できますが、シェルを介して現在のフォルダー内のすべてのZipファイルを解凍するにはどうすればよいですか?

Ubuntu Linuxサーバーを使用します。

161

このリンク に従って、これはbashで動作します:

\ *。Zipを解凍します

321
ChristopheD

ワイルドカードをエスケープするには、引用符で囲んでください。

unzip "*.Zip"
79
ghostdog74

現在のディレクトリ内のすべてのZipファイルを、Zipファイルのファイル名で新しいディレクトリに抽出します。

例、次のファイル:

myfile1.Zip
myfile2.Zip 

以下に抽出されます。

./myfile1/files...
./myfile2/files...

シェルスクリプト:

#!/bin/sh
for Zip in *.Zip
do
  dirname=`echo $Zip | sed 's/\.Zip$//'`
  if mkdir "$dirname"
  then
    if cd "$dirname"
    then
      unzip ../"$Zip"
      cd ..
      # rm -f $Zip # Uncomment to delete the original Zip file
    else
      echo "Could not unpack $Zip - cd failed"
    fi
  else
    echo "Could not unpack $Zip - mkdir failed"
  fi
done
52
Pedro Lobito

* .Zipを解凍するか、サブフォルダーにある場合は、

find . -name "*.Zip" -exec unzip {} \;
32
phatmanace
for i in *.Zip; do
  newdir="${i:0:-4}" && mkdir "$newdir"
  unzip "$i" -d  "$newdir"
done

これにより、すべてのZipアーカイブが、Zipアーカイブのファイル名で名前が付けられた新しいフォルダーに解凍されます。

a.Zipb.Zipc.Zipは、それぞれabcフォルダーに解凍されます。

12
Jahid

すべての.Zipファイルを解凍し、コンテンツを.Zipファイルと同じ名前の同じフォルダーに新しいフォルダーに保存します。

find -name '*.Zip' -exec sh -c 'unzip -d "${1%.*}" "$1"' _ {} \;

これは @ phatmanaceの回答 とアドレスの拡張です @ RishabhAgrahariのコメント

これは、現在のディレクトリ内のすべてのZipファイルを抽出しますが、Zipファイル(サブフォルダにある)をそれぞれのサブフォルダに抽出したい場合はどうなりますか?

7
jojo

aunpack -e *.Zipatoolがインストールされています。エラーをインテリジェントに処理し、Zipにファイルが1つしか含まれていない限り、常にサブディレクトリに展開するという利点があります。したがって、ディレクトリ構造のないZipのunzipの場合と同様に、現在のディレクトリを大量のファイルで汚染する危険はありません。

6
kampu

POSIXシェルでは、これにより、Zipファイルごとに異なるディレクトリに解凍されます。

for file in *.Zip
do
    directory="${file%.Zip}"
    unzip "$file" -d "$directory"
done
4
Jeff Fisher

これを使って:

for file in `ls *.Zip`; do
unzip ${file} -d ${unzip_dir_loc}
done
2
Ankit Malhotra

for file in 'ls *.Zip'; do unzip "${file}" -d "${file:0:-4}"; done

2
anurag Dalia

これは、 Pedro Lobitoanswer の変形です ディレクトリを再帰的にループして特定の拡張子を持つファイルを削除する方法 教え:

shopt -s globstar
root_directory="."

for Zip_file_name in **/*.{Zip,sublime\-package}; do
    directory_name=`echo $Zip_file_name | sed 's/\.\(Zip\|sublime\-package\)$//'`
    printf "Unpacking Zip file \`$root_directory/$Zip_file_name\`...\n"

    if [ -f "$root_directory/$Zip_file_name" ]; then
        mkdir -p "$root_directory/$directory_name"
        unzip -o -q "$root_directory/$Zip_file_name" -d "$directory_name"

        # Some files have the executable flag and were not being deleted because of it.
        # chmod -x "$root_directory/$Zip_file_name"
        # rm -f "$root_directory/$Zip_file_name"
    fi
done
0
user

ファイルがgzip'dの場合。次に使用します:

gunzip -rfk .

ルートディレクトリから元のファイルを保持して再帰的に各ディレクトリのファイルを抽出します(または-kを削除して削除します)

0
Devaroop