Zipファイルのディレクトリがあります(Windowsマシンで作成)。 unzip filename
を使用して手動で解凍できますが、シェルを介して現在のフォルダー内のすべてのZipファイルを解凍するにはどうすればよいですか?
Ubuntu Linuxサーバーを使用します。
このリンク に従って、これはbashで動作します:
\ *。Zipを解凍します
ワイルドカードをエスケープするには、引用符で囲んでください。
unzip "*.Zip"
現在のディレクトリ内のすべての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
フォルダーに解凍されます。
すべての.Zip
ファイルを解凍し、コンテンツを.Zip
ファイルと同じ名前の同じフォルダーに新しいフォルダーに保存します。
find -name '*.Zip' -exec sh -c 'unzip -d "${1%.*}" "$1"' _ {} \;
これは @ phatmanaceの回答 とアドレスの拡張です @ RishabhAgrahariのコメント:
これは、現在のディレクトリ内のすべてのZipファイルを抽出しますが、Zipファイル(サブフォルダにある)をそれぞれのサブフォルダに抽出したい場合はどうなりますか?
aunpack -e *.Zip
、atool
がインストールされています。エラーをインテリジェントに処理し、Zipにファイルが1つしか含まれていない限り、常にサブディレクトリに展開するという利点があります。したがって、ディレクトリ構造のないZipのunzip
の場合と同様に、現在のディレクトリを大量のファイルで汚染する危険はありません。
POSIXシェルでは、これにより、Zipファイルごとに異なるディレクトリに解凍されます。
for file in *.Zip
do
directory="${file%.Zip}"
unzip "$file" -d "$directory"
done
これを使って:
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
これは、 Pedro Lobitoanswer の変形です ディレクトリを再帰的にループして特定の拡張子を持つファイルを削除する方法 教え:
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
ファイルがgzip'd
の場合。次に使用します:
gunzip -rfk .
ルートディレクトリから元のファイルを保持して再帰的に各ディレクトリのファイルを抽出します(または-k
を削除して削除します)