ディレクトリがZIPに含まれているかどうかに関係なく、ディレクトリに解凍します。

ディレクトリがZIPに含まれているかどうかに関係なく、ディレクトリに解凍します。

次のような内容のZIPファイルがあるとします。

# file: with_out_dir.zip
file1.txt
file2.cpp
file3.js
some_sub_dir/
- file_in_subdir.txt
file4.xml

しかし、このようにも見えるかもしれません

# file: with_dir.zip
archive/
- file1.txt
- file2.cpp
- file3.js
- some_sub_dir/
-- file_in_subdir.txt
- file4.xml

そして、私は bash スクリプトでこれらのファイルを抽出しますが、いずれにしても/var/sample/次のように抽出する必要があります。

# expected output
/var/
- sample/
-- file1.txt
-- file2.cpp
-- file3.js
-- some_sub_dir/
--- file_in_subdir.txt
-- file4.xml

スクリプトを使用してそれを実行する最善の方法は何ですかbash?

現時点では、unzipzip ファイルを解凍するために を使用していますが、他のコマンドライン ツールの方が使いやすい場合は、使用してもかまいません。

答え1

私は単純に次のことを提案します:

  • 新しいディレクトリに抽出する
  • 抽出後、新しいディレクトリにサブディレクトリが 1 つだけ含まれる場合は、その中のすべてのファイルを 1 レベル上に移動し、元のサブディレクトリを削除します。

ちなみに、アーカイブ(tar、zipなど)の作成それなしアーカイブのすべてのメンバーをサブディレクトリ内に置くことはなぜそんなことをするのか分からない!

答え2

世の中にはスマートな抽出ツールがいくつかあります (自分で 1 つ作成してから知りました)。dtrx( でインストールsudo apt-get install dtrx) を参照することをお勧めします。

dtrx いつもアーカイブにまだない場合は、トップレベル ディレクトリを作成します。dtrxの代わりに を呼び出す bash ラッパー スクリプトを適応させるunzipと、サブディレクトリを移動してトップレベル ディレクトリを削除するだけなので、はるかに簡単になります (トップレベル ディレクトリは常に存在するため)。

関連情報