zipファイルを作成し、ディレクトリ構造を無視する


216

次のコマンドを使用してzipファイルを作成する必要があります。

zip /dir/to/file/newZip /data/to/zip/data.txt

これは機能しますが、作成されたzipファイルは、生ファイルへのディレクトリを模倣したディレクトリ構造を作成します。不要なフォルダがたくさんあります。

manページやGoogleハントをざっと見ただけでは、答えは見つかりませんでした。



2
私はこの質問が他のすべてのスタック交換より先に起こったと思っていましたが、残念ながらスーパーユーザーの投稿は実際にはこの質問よりも古いです。ここで何かお知らせできることがありましたら、お知らせください。グーグルはまだここで多くのトラフィックを駆動するので、これはかなりホットな答えでなければなりません。:D
Jake

回答:


351

使用できます-j

-j
--junk-paths
          Store just the name of a saved file (junk the path), and do  not
          store  directory names. By default, zip will store the full path
          (relative to the current directory).

19
-j(一緒に-r)ディレクトリに対して機能しない場合は、この回答を
czerasz

たまにうまくいかないときがあります... @czeraszリンクを使用してください;)これは基本的にプッシュされたpopdコンボです
TecHunter

36

オプション-jと一緒に使用しても機能しません-r
したがって、その回避策は次のようになります。

cd path/to/parent/dir/;
zip -r complete/path/to/name.zip ./* ;
cd -;

またはインラインバージョン

cd path/to/parent/dir/ && zip -r complete/path/to/name.zip ./* && cd -

画面に出力を表示さ/dev/nullせたくない場合は、出力先を指定できcd -ます


実際には、次のことを実行する必要がありますcd path/to/parent/dir/ && zip -r ../../../../name.zip ./* && cd -
。– eddyP23

@ eddyP23どうやって違いが出るの?むしろそれはあなたにノーを追加させるでしょう。パス内の各ディレクトリのparentDir(..)の:
Vikas Tawniya

結果は同じです。しかし、多くの異なる環境で実行される自動化スクリプトでは、グローバルパスがどうなるかわからないため、通常はグローバルパスを避けます。しかし、そこからcd path/to/parent/dir/あなたは../簡単にダブルドットの数を計算することができます。
eddyP23

@ eddyP23は理にかなっている
Vikas Tawniya

33

次の-jオプションを使用します。

   -j     Store  just the name of a saved file (junk the path), and do not
          store directory names. By default, zip will store the full  path
          (relative to the current path).


3

または、ファイルへの一時的なシンボリックリンクを作成することもできます。

ln -s /data/to/zip/data.txt data.txt
zip /dir/to/file/newZip !$
rm !$

これはディレクトリに対しても機能します。


1

親ディレクトリを保持するので unzipファイルをどこにも排出しないする

ディレクトリを圧縮するとき、親ディレクトリをアーカイブに保持すると、後でアーカイブファイルを解凍するときに現在のディレクトリがポイ捨てされるのを防ぐのに役立ちます。

したがって、すべてのパスを保持しないようにするには、また-jと-rを一緒に使用できないため(エラーが発生します)、代わりに次のようにします。

cd path/to/parent/dir/;
zip -r ../my.zip ../$(basename $PWD)
cd -;

../$(basename $PWD)親ディレクトリを保持魔法です。

だから今unzip my.zip、あなたのすべてのファイルを含むフォルダを与えるでしょう:

parent-directory
├── file1
├── file2
├── dir1
│   ├── file3
│   ├── file4

現在のディレクトリを解凍されたファイルで散らかす代わりに:

file1
file2
dir1
├── file3
├── file4

0

-jrmオプションを使用してファイルとディレクトリ構造を削除するだけです

zip -jrm /path/to/file.zip /path/to/file

注意してください-m --move指定されたファイルをzipアーカイブに移動します。実際、これは指定されたzipアーカイブを作成した後、ターゲットディレクトリ/ファイルを削除します。ファイルの削除後にディレクトリが空になると、そのディレクトリも削除されます。zipがエラーなしでアーカイブを作成するまで、削除は行われません。これはディスク容量を節約するのに役立ちますが、潜在的に危険なので、すべての入力ファイルを削除する前に-Tと組み合わせてアーカイブをテストすることをお勧めします。
カタリスト
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.