85

このunzipコマンドには、アーカイブを再帰的に解凍するオプションがありません。

次のディレクトリ構造とアーカイブがある場合:

/母/愛情.zip
/Scurvy/Sea Dogs.zip
/Scurvy/Cures/Limes.zip

そして、すべてのアーカイブを各アーカイブと同じ名前のディレクトリに解凍したいと思います。

/母/愛する/1.txt
/母/愛情.zip
/壊血病/Sea Dogs/2.txt
/Scurvy/Sea Dogs.zip
/Scurvy/Cures/Limes/3.txt
/Scurvy/Cures/Limes.zip

どのコマンドを発行しますか?

スペースを含むファイル名でこれが詰まらないことが重要です。

4

10 に答える 10

150

それぞれのフォルダにファイルを抽出したい場合は、これを試すことができます

find . -name "*.zip" | while read filename; do unzip -o -d "`dirname "$filename"`" "$filename"; done;

高I/Oを処理できるシステムのマルチプロセスバージョン:

find . -name "*.zip" | xargs -P 5 -I fileName sh -c 'unzip -o -d "$(dirname "fileName")/$(basename -s .zip "fileName")" "fileName"'
于 2010-02-23T12:50:56.547 に答える
40

すべての zip ファイルを作業ディレクトリに展開し、find コマンドと while ループを使用する 1 つのソリューションを次に示します。

find . -name "*.zip" | while read filename; do unzip -o -d "`basename -s .zip "$filename"`" "$filename"; done;
于 2008-09-20T12:08:31.507 に答える
38

すべてのファイル名 (改行を含む) を正しく処理し、拡張子を削除しただけで、ファイルと同じ場所にあるディレクトリに抽出するソリューション:

find . -iname '*.zip' -exec sh -c 'unzip -o -d "${0%.*}" "$0"' '{}' ';'

.jarを使用して追加することで、より多くのファイルタイプ( など)を簡単に処理できることに注意してください-o

find . '(' -iname '*.zip' -o -iname '*.jar' ')' -exec ...
于 2014-03-13T16:02:40.187 に答える
5

単一のコマンドラインで -exec フラグとともに find を使用して、ジョブを実行できます

find . -name "*.zip" -exec unzip {} \;
于 2008-09-20T12:20:06.690 に答える
3

-r フラグを使用した gunzip のようなものですか?...

ディレクトリ構造を再帰的に移動します。コマンドラインで指定されたファイル名のいずれかがディレクトリである場合、gzip はそのディレクトリに降りて、そこにあるすべてのファイルを圧縮します (または gunzip の場合は解凍します)。

http://www.computerhope.com/unix/gzip.htm

于 2008-09-20T12:11:06.070 に答える
1

cygwinを使用している場合、basenameコマンドの構文は少し異なります。

find . -name "*.zip" | while read filename; do unzip -o -d "`basename "$filename" .zip`" "$filename"; done;
于 2009-04-10T23:41:38.497 に答える