ファイルのバッチを解凍する


33

しようとすると

 unzip filename.zip

できます。ただし、一連のzipファイルを解凍する必要があります。

なぜ:

 find . -name "*.zip" -print0 | xargs -0 unzip

または

 ls *.zip | xargs unzip

動かない?

どちらの場合も、「注意:ファイル名が一致していません:」というメッセージが表示されます。

回答:


48

次のコマンドを発行できます。

$ unzip '*.zip'

参考のためにここを見てください。


はっきりとは言いませんでしたが、すべてが同じディレクトリにあるわけではありません。したがって、findの出力が必要です。
ジャンノブルト

4
ありがとう。これは実際の質問と完全に一致するかもしれませんが、これで私の問題は解決しました。私はしようunzip *としていましたがcaution: filename not matched、すべてのファイルに対して返されましたunzip '*.zip'が、仕事をしました。
イヴァン

27

コマンドはすべてのファイルを同じコマンドラインに詰め込むため機能しません。これはほとんどのプログラムで機能しunzipますが、最初の引数をzipファイルとして取得し、最初の引数以降はそれから抽出するファイルとして取得します。ファイルごとにコマンドを1回実行する必要があります。

find . -name "*.zip" -print0 | xargs -0 -n1 unzip

または

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

2番目の方法は、実際に多くのファイルがある場合に適しているようです。(それ以外の場合、xargsではコマンドが長すぎると不満を言いました)
-Recct

5

bashでは、次のこともできます。

for i in *.zip; do
    unzip "$i"
done

またunzip-dスイッチを使用して、出力のターゲットを異なる場所にすることができます。

例えば:

uzdir=/path/to/unzips
for i in *.zip; do
    [ -d "$uzdir/$i" ] || mkdir -p "$uzdir/$i"
    unzip "$i" -d "$uzdir/$i"
done

1

上記のループよりもはるかに簡単な解決策があります。ディレクトリ-dフラグを使用します。

unzip -o somefiles.zip -d $directoryPath

-dファイルを探すディレクトリではなく、抽出するディレクトリを指定します。
LegendaryDude
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.