web-dev-qa-db-ja.com

ディレクトリ内のすべてのZipファイルに専用のフォルダーを作成し、Zipファイルを抽出します

Zipファイルを選択して[ここに抽出]を右クリックすると、Zipファイル名のフォルダーが作成され、Zipファイルのコンテンツ全体がそこに抽出されます。

ただし、いくつかのZipファイルをシェル経由で変換したいと思います。しかし、私がするとき

unzip filename.Zip

フォルダー"filename"は作成されませんが、すべてのファイルは現在のディレクトリに抽出されます。

パラメーターを調べましたが、そのようなパラメーターはありません。私も試しました

for zipfile in \*.Zip; do mkdir $zipfile; unzip $zipfile -d $zipfile/; done

ただし、2。$ zipfileおよび4. $ zipfileの.Zip拡張子は、sedで削除する必要があります。私が行った場合

for zipfile in \*.Zip; do mkdir sed 's/\.Zip//i' $zipfile; unzip $zipfile -d sed 's/\.Zip//i' $zipfile/; done 

動作していません。

.Zip$zipfile拡張を適切に置き換えるにはどうすればよいですか?

シェルスクリプトより簡単な方法はありますか?

47
creativeDev

「ここで抽出」は、使用しているunzipラッパーの機能にすぎません。 unzipは、アーカイブに実際にあるもののみを抽出します。おそらく、シェルスクリプトほど簡単な方法はありません。ただし、POSIX準拠のシェルを使用している場合、sedawkなどは必要ありません。

_for f in *.Zip; do unzip -d "${f%*.Zip}" "$f"; done
_

(_*_をエスケープしないでください。パス名の展開は行われません。)Zipアーカイブに、Eclipseアーカイブ(常に_Eclipse/_を含む)などのディレクトリが含まれている場合、終了することに注意してください。いずれの場合も_./Eclipse*/Eclipse/eclipse.ini_になります。ドライランの場合は、echoの前にunzipを追加します。

44
PointedEars

unzip file.Zip -d xxxはファイルをディレクトリxxxに抽出し、xxxが存在しない場合は作成されます。詳細については、manページを確認してください。

以下のawk行が仕事をするはずです:

ls *.Zip|awk -F'.Zip' '{print "unzip "$0" -d "$1}'|sh

以下のtestを参照してください。

削除したこと|sh最後に、私のzipは偽のアーカイブです。ここで生成されたコマンドラインを表示したいだけです。

kent$  ls -l
total 0
-rw-r--r-- 1 kent kent 0 Nov 12 23:10 001.Zip
-rw-r--r-- 1 kent kent 0 Nov 12 23:10 002.Zip
-rw-r--r-- 1 kent kent 0 Nov 12 23:10 003.Zip
-rw-r--r-- 1 kent kent 0 Nov 12 23:10 004.Zip
-rw-r--r-- 1 kent kent 0 Nov 12 23:10 005.Zip
-rw-r--r-- 1 kent kent 0 Nov 12 23:10 006.Zip
-rw-r--r-- 1 kent kent 0 Nov 12 23:10 007.Zip

kent$  ls *.Zip|awk -F'.Zip' '{print "unzip "$0" -d "$1}'
unzip 001.Zip -d 001
unzip 002.Zip -d 002
unzip 003.Zip -d 003
unzip 004.Zip -d 004
unzip 005.Zip -d 005
unzip 006.Zip -d 006
unzip 007.Zip -d 007
84
Kent

7Zipのコマンドラインバージョンであるp7Zipがインストールされている場合は、次を使用できます。

7z x '*.Zip' -o'*'
8
Franz Knülle

スイッチの後にフォルダー名とスラッシュを追加します。例:

unzip -d newfolder/ zipfile.Zip

Zipはフォルダー「newfolder」を作成し、アーカイブをそこに抽出します。

末尾のスラッシュは必須ではありませんが、これは古い習慣によるものだと思います(私はDebianとUbuntuを使用しています)。

5
Jnnno

atoolのaunpackは、あらゆる種類のアーカイブに対してデフォルトでこれを行います。

1
kralyk