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


203

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

Ubuntu Linux Serverを使用する。

回答:


395

このリンクによると、これはbashで動作します:

\ *。zipを解凍します


2
Zshではバックスラッシュが必要でした。Bashを使用している場合に必要になる理由はわかりません。
Don McCurdy、2015年

重複したファイルはどうなりますか?私はそれがオーバーライドするだけだと思いますか?
kerner1000

macOSで効果的に動作しますA
Ahi Tuna

1
これを行うと、ディレクトリ内のすべてのzipファイルでファイル名が一致しなくなります
thebeancounter

1
WSLでは、引用付きのバージョンが機能しました。ファイル名にもスペースが含まれています、FWIW。
Max Candocia

107

ワイルドカードをエスケープするには、引用符をいくつか入れてください。

unzip "*.zip"

2
+1これは私のために働いた。残りを制限しながら、ファイル名を特定の形式で解凍する必要がありました。一致する形式を二重引用符で囲んだだけで、魅力的に機能しました。出力から、正常に処理されたアーカイブの数がわかります。
Lalit Kumar B

2018年11月18日、Ubuntu for Windowsサブシステムで問題なく動作しました。トップアンサーはうまくいきませんでした。
julianstanley

64

次のbashスクリプトは、現在のディレクトリにあるすべての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

4
これはすべてのものを征服するものです。高位投票されていないなんて信じられない
ビリーノア2015

これは、ファイル名のスペースを扱いません。
David Oliver

1
ただ、引用符を追加し"たファイル名に
CONvid19

1
`は私の日を救った!ありがとう!私はいくつかのループ、解凍、アクションの実行、コピー、何かのgrep、削除を行っています。不足しているのは、bashスクリプトで変数としてfile.gzからfileに移動する方法
でした

38

* .zipを解凍するか、サブフォルダにある場合は次のようにします

find . -name "*.zip" -exec unzip {} \;

unzipはワイルドカード処理を行うため、「*。zip」というファイルは期待どおりに動作しません。
ジオカー

3
実際、これは期待どおりに行われ、検索操作の結果はunzipに渡されます
John Bargman、

1
これにより、現在のディレクトリにあるすべてのzipファイルが抽出されます。zipファイル(サブフォルダーにある)をそれぞれのサブフォルダーに抽出するにはどうすればよいですか?
Rishabh Agrahari

2
@RishabhAgrahari私は新しい回答であなたのコメントに対処しまし
ジョジョ

以下のためのgzip'edファイル、使用gunzip -rfk .それぞれのフォルダ内の再帰的な解凍のために
Devaroop

17

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

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

これは@phatmanaceの回答の拡張であり、@ RishabhAgrahariのコメントに対応しています

これにより、現在のディレクトリにあるすべてのzipファイルが抽出されます。zipファイル(サブフォルダーにある)をそれぞれのサブフォルダーに抽出するにはどうすればよいですか?


1
以下のためのgzip'edファイル、使用gunzip -rfk .それぞれのフォルダ内の再帰的な解凍のために
Devaroop

2
取得find: illegal option -- n使用してUnZipを6.00誰が- ?
DannyDannyDanny

find . -name '*.zip' -exec sh -c 'unzip -d "${1%.*}" "$1"' _ {} \;ディレクトリリストを忘れました。
SaundersB

16
for i in *.zip; do
  newdir="${i:0:-4}" && mkdir "$newdir"
  unzip "$i" -d  "$newdir"
done

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

a.zip b.zip c.zipa b cそれぞれフォルダに解凍されます。


6

aunpack -e *.zipatoolインストール済み。エラーをインテリジェントに処理し、zipにファイルが1つだけ含まれていない限り、常にサブディレクトリに解凍されるという利点があります。したがって、unzipディレクトリ構造のないzipのように、大量のファイルで現在のディレクトリを汚染する危険はありません。


6

どのPOSIXシェルでも、これは各zipファイルごとに異なるディレクトリに解凍されます。

for file in *.zip
do
    directory="${file%.zip}"
    unzip "$file" -d "$directory"
done

1
またはワンライナーとして:for file in *.zip; do unzip "$file" -d "${file%.zip}"; done
peterflynn '19


2

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


1
私にとって素晴らしい。サブフォルダにそれぞれ解凍する
18

ただfor file in *.zip; do ...正しい方が安全ですか?
peterflynn 2018

1

ファイルがある場合gzip'd。次に、単に使用します:

gunzip -rfk .

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


0

これは、ディレクトリを再帰的にループして特定の拡張子持つファイルを削除する方法を使用するPedro Lobito 回答のバリアントです。

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

-2
for i in `ls *.zip`; do unzip $i; done

14
危険な lsの使用。「-j -o -d .. jackass.zip」というファイルがある場合
geocar


-3

使用する

sudo apt-get install unzip 

unzip file.zip -d path_to_destination_folder

Linuxでフォルダを解凍する


これは単一のファイルのみを解凍します。質問はすべてのフォルダを解凍することです
Vivek Panday 2015

公平を期すためには、タイトル「解凍すべてのファイルにはAディレクトリは、」可能性があいまいにしても、「解凍別のディレクトリに単一のアーカイブ」を意味します。
jdersen 2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.