次のような内容の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
?
現時点では、unzip
zip ファイルを解凍するために を使用していますが、他のコマンドライン ツールの方が使いやすい場合は、使用してもかまいません。
答え1
私は単純に次のことを提案します:
- 新しいディレクトリに抽出する
- 抽出後、新しいディレクトリにサブディレクトリが 1 つだけ含まれる場合は、その中のすべてのファイルを 1 レベル上に移動し、元のサブディレクトリを削除します。
ちなみに、アーカイブ(tar、zipなど)の作成それなしアーカイブのすべてのメンバーをサブディレクトリ内に置くことは悪なぜそんなことをするのか分からない!
答え2
世の中にはスマートな抽出ツールがいくつかあります (自分で 1 つ作成してから知りました)。dtrx
( でインストールsudo apt-get install dtrx
) を参照することをお勧めします。
dtrx
いつもアーカイブにまだない場合は、トップレベル ディレクトリを作成します。dtrx
の代わりに を呼び出す bash ラッパー スクリプトを適応させるunzip
と、サブディレクトリを移動してトップレベル ディレクトリを削除するだけなので、はるかに簡単になります (トップレベル ディレクトリは常に存在するため)。