Ubuntuターミナルを介して、それぞれ同じ名前の新しいフォルダーにいくつかのzipファイルを抽出します


37

多くのzipファイルa.zip、b.zip、c.zip、...がありそれぞれをターミナルを介してそれぞれ新しいフォルダーa、b、c、...に抽出します。

実際に、find私は実際に多くのフォルダ2014、2013、2012を持っているので、後で使用できるソリューションです...それぞれに多くのzipファイルa.zip、b.zipなどが含まれていますfind . -name "*.zip" -exec {} unzip \;すべてのファイルを解凍し、それぞれの親フォルダーに配置します。


回答:


72

unzipの-dオプションを使用して、アーカイブコンテンツの代替ディレクトリを設定できる必要があります。

unzip -d a a.zip
unzip -d b b.zip

等々。内findの式には、シェルのパラメータ拡張などを使用してzipファイルの名前からディレクトリの名前を導出することができるはずです

find -name '*.zip' -exec sh -c 'unzip -d "${1%.*}" "$1"' _ {} \;

追加することにより、最初にそれをテストechoすなわち

find -name '*.zip' -exec sh -c 'echo unzip -d "${1%.*}" "$1"' _ {} \;

またはのようなもの

while read -rd $'\0' f; do 
  unzip -d "${f%.*}" "$f"
done < <(find -name '*.zip' -print0)

2
test it first…部品の+1
mrzmyr

2
findディレクトリ、その必要find . -name ...
SLF

@slf POSIXly、はい-ただし、GNUの場合はそうではありませんfind「開始点が指定されていない場合、.想定されます。」
steeldriver

10

私はこれを自分自身で探しましたが、他のコマンドですでにそれを行っていて、それを他のほぼすべてに、すでにやっていた方法で適用できることに気付きました。

findメソッドは、理由もなく複雑すぎてクレイジーです。

for i in *.zip; do unzip "$i" -d "${i%%.zip}"; done

これは、手元の質問に対する最良の答えを伝えることです。前のものはばかげており、これ以降はそれぞれのルートフォルダのファイルに分類されません。
TheMegolith

どのようにしてディレクトリを作成するに行くかすることなく、.zip接尾辞?友達を頼む。
ダシャード

答えは、拡張子が.zipのディレクトリを作成しません。これは、中括弧内の部分のまさにポイントです。
ケンシンダー

6

単に使用する

unzip '*.zip' -d /home/user/folder/

11
私は何かが欠けていない限り、これは/ホーム/ユーザー/フォルダにすべてを解凍します、ではないに/ホーム/ユーザー/フォルダ/と/ホーム/ユーザー/フォルダ/ B
M.ジャスティン

1

また、unrarを使用してこれを行う必要がありました。これは、kencinderのコードを少し変更することで実現できます。

for i in *.rar; do mkdir "${i%%.rar}"; unrar x -r "$i" "${i%%.rar}"; done 

PS:これをコメントとして追加したかったのですが、評判ポイントが足りません!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.