Unix zipディレクトリ。ただし、特定のサブディレクトリ(およびその中のすべて)は除外されています


115

ディレクトリをzip圧縮しようとしています(UNIXでSSH経由)が、いくつかのサブディレクトリ(およびその中のすべてのファイルとディレクトリ)を除外する必要があります。

これまでのところ私はこれを持っています:

zip -r myarchive.zip dir1 -x dir1/ignoreDir/**/* 

しかし、それはうまくいかないようです。

私も試しました

zip -r myarchive.zip dir1 -x dir1/ignoreDir1/* dir1/ignoreDir2/*

ただし、これには、ignoreDir1およびignoreDir2内にサブディレクトリが含まれます。

除外したいディレクトリ内のサブディレクトリ構造は非常に重要なので、単に各ディレクトリを-x引数に追加することはできません。

誰もこれを行う方法を知っていますか?


@AlexanderMills-この質問をご覧ください。
-jww

回答:


130

私はとても近かった!

実際に必要なコマンドは次のとおりです。

zip -r myarchive.zip dir1 -x dir1/ignoreDir1/**\* dir1/ignoreDir2/**\*

フォローしてくれてありがとう!ところで、あなたはあなた自身の答えを受け入れることができます。
ダニエルH

2
これはosxでは機能しませんでした。@pathfilderの答えはそうでした。
rynop

11
これの代わりに:-x dir1 / ignoreDir1 / ** \ *、これを行うことができます:-x dir1 / ignoreDir1 / \ *
リチャードゴメス

67

特定のシステムでは、ディレクトリを除外するために、除外したディレクトリを引用符で囲む必要があり、それは魅力のように機能しました。

zip -r myarchive.zip dir1 -x "dir1/ignoreDir1/*" "dir1/ignoreDir2/*"

ノート:

-これにより、除外するディレクトリとその中のすべてのファイルの両方が除外されました。

-除外するディレクトリへのフルパスを使用する必要があります!


5
これはMac OSで動作するものです。:-)
フィジカル

9
誰もがいずれかの必要な引用のパスをまたはアスタリスクをエスケープする理由を説明しなかったように、その理由はこれです:パスを引用したり、ワイルドカードがエスケープされていない場合、シェルはワイルドカードの展開を行いますにそれらを渡すzipのリストを受け取るであろう、指定されたディレクトリ内のエントリへのパス、ただしそれらのサブディレクトリ内のファイルへのパスではないため、指定されたディレクトリのzip下のすべてを無視しないようにします。
ザグリムサン

私はもともと、これは働いていた理由のためのMac OS上で私のディレクトリにスペースがあったたのだと思うと、これは\必要と回避
パスファインダー

@zagrimsanを整理してくれてありがとう。問題修正し、その理由を説明したので、理解できるようになりました(これは将来、他のことにも役立ちます)。👍
Synetech

8

使用する@sulman:

     zip -r myarchive.zip dir1 -x dir1 / ignoreDir1 / ** \ * dir1 / ignoreDir2 / ** \ *

以下を使用して、zipアーカイブにdir1 / ignoreDir1 / emptyフォルダーが引き続き含まれます。

     zip -r myarchive.zip dir1 -x dir1 / ignoreDir1 ** dir1 / ignoreDir2 **

トリックを行います。また、dir1だけではなく、先頭の**を使用してサブフォルダーを検索することもできます。


ああ大丈夫!これに光を当ててくれてありがとう!
サルマン

7

次のことを行います

zip -r myarchive.zip dir1 -x dir1 / ignoreDir1 \ * dir1 / ignoreDir2 \ *

**@sulmanには何が必要でしたか?

次のようにそれは私にとって魅力のように機能します:

[root@ip-00-000-000-000 dir1]# ls -lrt dir1/ 
total 16
drwxr-xr-x 2 root root 4096 Oct 31 07:38 ignoredir1
drwxr-xr-x 2 root root 4096 Oct 31 07:38 ignoredir2
drwxr-xr-x 2 root root 4096 Oct 31 07:39 dir3
-rw-r--r-- 1 root root    8 Oct 31 07:39 test.txt

[root@ip-00-000-000-000 temp]# zip -r dir1.zip dir1 -x dir1/ignoredir1\* dir1/ignoredir2\*
  adding: dir1/ (stored 0%)
  adding: dir1/dir3/ (stored 0%)
  adding: dir1/dir3/test3.txt (deflated 13%)
  adding: dir1/test.txt (stored 0%)

**が必要な理由がわかりません。たぶん他の誰かがこれにいくらか光を当てることができますか?
スルマン

申し訳ありませんが、@ sulman、間違って入力しました。私が意味したのは、私の最新の編集によるものです。私にとって魅力的なように動作します:)
ericn

1

他の回答と同じですが、ディレクトリのすべてのコンテンツを除外する代わりに、ディレクトリを完全に除外します。

zip -r myarchive.zip dir1 -x dir1/ignoreDir1/\* dir1/ignoreDir2/\*

0

私はこれがDavid R Heffelfingerから機能することを発見しました:

zip -r myarchive.zip dir1 -x dir1/ignoreDir1\* dir1\ignorDir2\*

ディレクトリとその内容は除外されました。


dir1との間のバックスラッシュは確かにスラッシュでignorDir2あることが意図されています。他のバックスラッシュがバックスラッシュであることを意味しますか?もしそうなら、2年前のファジービーの答えをコピーしたばかりです。
Gマン14年

-1

私のために働いた: zip -9 -r〜/ folded.zip online -x folder / folder2 / folder3 / foldern / \ *

アスタリスクをエスケープする必要があるようです。


2
これは、1年前のリックエーラートやエリック(数年前)のソリューションとどう違うのですか?...新しいものを投稿する前に、提供ソリューションを読んでください
zagrimsan

アスタリスクの前にバックスラッシュを追加したからです(つまり、アスタリスクをエスケープするためです)。Linuxバージョンでは、そうしないと動作しません。
フランシスコM

また、Rick Ehrahrt(2014)とeric(2012)が同じソリューションを投稿しました(アスタリスクを回避するため)。ソリューションに問題はありませんが、同じものを複数回投稿することは、ソリューションが機能する理由を説明することによってソリューションに大幅に深みを追加できる場合を除き、意味がありません。このような単純なケースでは、これ以上説明することはありません。個人的にこれを受け取らないでください。ここでの私の唯一の意図は、ユーザーが最小限の労力で最適なソリューションを見つけることができるように、SUを簡潔かつ簡潔に保つことです。
ザグリムサン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.