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
拡張を適切に置き換えるにはどうすればよいですか?
シェルスクリプトより簡単な方法はありますか?
「ここで抽出」は、使用しているunzip
ラッパーの機能にすぎません。 unzip
は、アーカイブに実際にあるもののみを抽出します。おそらく、シェルスクリプトほど簡単な方法はありません。ただし、POSIX準拠のシェルを使用している場合、sed
、awk
などは必要ありません。
_for f in *.Zip; do unzip -d "${f%*.Zip}" "$f"; done
_
(_*
_をエスケープしないでください。パス名の展開は行われません。)Zipアーカイブに、Eclipseアーカイブ(常に_Eclipse/
_を含む)などのディレクトリが含まれている場合、終了することに注意してください。いずれの場合も_./Eclipse*/Eclipse/eclipse.ini
_になります。ドライランの場合は、echo
の前にunzip
を追加します。
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
7Zipのコマンドラインバージョンであるp7Zipがインストールされている場合は、次を使用できます。
7z x '*.Zip' -o'*'
スイッチの後にフォルダー名とスラッシュを追加します。例:
unzip -d newfolder/ zipfile.Zip
Zipはフォルダー「newfolder」を作成し、アーカイブをそこに抽出します。
末尾のスラッシュは必須ではありませんが、これは古い習慣によるものだと思います(私はDebianとUbuntuを使用しています)。
atoolのaunpack
は、あらゆる種類のアーカイブに対してデフォルトでこれを行います。