web-dev-qa-db-ja.com

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

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

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

36
Michael

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

unzip -d a a.Zip
unzip -d b b.Zip

等々。 find式内で、Shellパラメーター展開を使用して、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)
69
steeldriver

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

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

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

単に使用する

unzip '*.Zip' -d /home/user/folder/
6
James Muller

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

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

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

0