ファイルの内容を解凍しますが、アーカイブフォルダーは作成しません


37

多くのディレクトリやファイルなどを含むファイルmyarchive.zipがあります。このmyarchive.zipファイルが「b」というディレクトリにあるとします。さて、「unzip myarchive.zip」コマンドを使用すると、システムはデフォルトで「myarchive」というディレクトリを作成し、zipファイルの内容を保存します。私はないないシステムは、この「ます。MyArchive」ディレクトリを作成したい-私はちょうど内容が「B」ディレクトリに解凍することにしたいです。これは可能ですか?

私が今やっているのは、単に「cp」コマンドを発行して、新しく作成したディレクトリ(この場合は「myarchive」から「b」)にファイルをコピーしたい場所にコピーすることです。


8
デフォルトでunzipは、ディレクトリを作成しません。zipファイルには、おそらく最上位にディレクトリがあります。
クリスダウン

3
mv代わりに使用できますcpmv archive/* .; rmdir archive/または類似。
frostschutz

回答:


45

のバージョンにunzipは、-jディレクトリを作成しないオプションがあります。

そう

unzip -j /path/to/file.zip

ファイルに保存されているディレクトリ構造を復元せずに、すべてのファイルを現在のディレクトリに抽出しzipます。

アーカイブから1レベルのディレクトリのみを削除する場合(ではなく、myarchive/dir/fileとして抽出)、代わりに(ファイルに加えてファイルをサポートします)とそのオプションを使用できます。dir/filefilebsdtarziptar-s

bsdtar -xf /path/to/file.zip -s'|[^/]*/||'

8
-jアーカイブを使用する場合、ディレクトリ構造は再作成されず、すべてのファイルは抽出フォルダーに保存されます。これは、すべてのサブフォルダーがドロップされることを意味します。だから、あなたが持っているならばzip/A/f1zip/A/B/f2そしてzip/A/B/C/f3あなたがF1、F2、F3を持つ単一のフォルダで終わるでしょう。異なるサブフォルダーに同じ名前のファイルがある場合、ファンキーになります。通常、ディレクトリ構造全体ではなく、最上位のフォルダをドロップするだけです。
クリスチャンヴラビー

3
@CristianVrabie、まあそれはまさに私が答えで言っていることです。あなたが求めているものにbsdtarの代替を追加しました。編集を参照してください。
ステファンシャゼラス


1

質問であなたが言うように、受け入れられた答えが方法を指定していませんが、zipファイルに保存されたフォルダパスを使用せずに特定のフォルダに抽出したい場合は、この方法で-joptionと-doptionを使用できます:

unzip -j /path/to/file.zip -d other_folder

またはあなたの場合

unzip -j myarchive.zip -d b

2
あなたはそうすることができるのは正しい。ただし、サブディレクトリは作成されないため、別の手順を組み込む必要があります。OPはアーカイブのルートディレクトリの名前を別の名前に変更したいが、残りの構造はそのディレクトリの下に残したいと思っています。
プリフタン

-1

perform がすべてunzip myarchive.zipを含むディレクトリmyarchiveを生成する場合、それはzipファイルの作成者が実際にそのディレクトリでzipを実行したことを意味します。

必要なものを作成する唯一の方法は、実行後にすべてのコンテンツをディレクトリ外に移動することですunzip

[user@host]:some/path/b$ unzip myarchive.zip

[user@host]:some/path/b$ ls{ ディレクトリを表示myarchive }

[user@host]:some/path/b$ mv myarchive/* .

[user@host]:some/path/b$ rm -R myarchive

[user@host]:some/path/b$ ls{ myarchiveの最初のレベルを表示します(直接b }


1
また、mv myarchive/.* ..gitignoreや.htaccessなどのすべての隠しファイルを移動する必要があります。
キンジャルディキシット

1
@KinjalDixitそれも私の考えでした。アントワーヌKinjaiが指摘するように、あなたの例では致命的な欠陥があります:あなたが使用しているためrm -R、あなたが使用していないためとls -a任意のドットファイルがある場合は、表示していません。実行するrm -Rとドットファイルがあるとどうなりますか?それらをコピーしていないので、それらは失われます。あなたは本当にそれを修正し、おそらく違いを説明する必要があります。そして、これを考慮してください:彼らが持っているアーカイブではない場合はどうなりますか?または、アーカイブを圧縮解除してから削除するコマンドに追加するとどうなりますか?
プリフタン

Otoh rmdirは最初にそれが空であることを確認します...しかし、ユーザーがドットファイルについて知らない場合、それらを混乱させます。
プリフタン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.