(Windows マシンで作成された) ZIP ファイルのディレクトリがあります。を使用して手動で解凍できunzip filename
ますが、現在のフォルダー内のすべての ZIP ファイルをシェル経由で解凍するにはどうすればよいですか?
Ubuntu Linux サーバーの使用。
このリンクによると、これはbashで機能します:
解凍 \*.zip
ワイルドカードをエスケープするには、いくつかの引用符を入力してください:
unzip "*.zip"
次の 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
*.zipを解凍するか、サブフォルダーにある場合は、次のようなものです
find . -name "*.zip" -exec unzip {} \;
for i in *.zip; do
newdir="${i:0:-4}" && mkdir "$newdir"
unzip "$i" -d "$newdir"
done
これにより、すべての zip アーカイブが、zip アーカイブのファイル名で名前が付けられた新しいフォルダーに解凍されます。
a.zip
b.zip
c.zip
a
b
c
それぞれフォルダに解凍されます。
aunpack -e *.zip
、atool
インストール済み。エラーをインテリジェントに処理し、zip にファイルが 1 つしか含まれていない限り、常にサブディレクトリに解凍するという利点があります。unzip
したがって、ディレクトリ構造のない zipの場合のように、大量のファイルで現在のディレクトリを汚染する危険はありません。
これを使って:
for file in `ls *.Zip`; do
unzip ${file} -d ${unzip_dir_loc}
done
for file in 'ls *.zip'; do unzip "${file}" -d "${file:0:-4}"; done
for i in `ls *.zip`; do unzip $i; done