親ディレクトリを含めずにアーカイブを圧縮する


30

ディレクトリツリー内の多くのフォルダをzip圧縮したい

V-
 something.txt
 folder
 folder
 g.jpg
 h.jar

zipしようとすると、その内容(サブディレクトリとファイル)ではなくvフォルダーでzipアーカイブの作成が終了します

どうすればこれを回避できますか?

回答:


23

したがって、私が正しく理解していれば、特定のフォルダーにファイルとフォルダーをアーカイブしようとしていますが、ルートフォルダーは含まれていません。

例:

/test/test.txt
/test/test2.txt

test.txtとtest2.txtはzipに保存されますが、/ test /は保存されません

/ test /ディレクトリにcdして、次のように実行できます。

zip -r filename.zip ./*

これは、filename.zipという名前の同じフォルダーにアーカイブを作成します。または、実行できるフォルダ外から実行する場合、

zip -r test.zip test/*

/ *は、フォルダー全体ではなく、フォルダーの内容のみを含む部分です。

編集:OPは複数のzipを望んでいたので、解決策はちょっとしたハックになりました。これを行うより良い方法があるかどうか興味があります。

for d in */ ; do base=$(basename "$d") ; cd $base ; zip -r $base * ; mv "${base}.zip" .. ; cd .. ; done;

はい、しかし、私は同じことをする多くのファイルを持っているので、そのように退屈するでしょう、それはbashスクリプトまたはすべてのフォルダを持っているディレクトリで同じプロセスを自動化する何かのようにあります
Dami

1
[OK]を私は、スクリプトを実行し、それは私が、フォルダの内容だけがアーカイブになりたいアーカイブ内の親ディレクトリを作成した
のDami

1
私の間違い、それを少し逃しました。探したばかりの-jパラメーターを追加しました。明らかに不要な部分はスキップされます。これを試してください:for d in */ ; do base=$(basename "$d") ; zip -rj "${base}.zip" "$d" ; done;
zzbomb

18
外部からのzip -r test.zip test / *は、zipファイルにtestをディレクトリとして追加します
-smihael

4
@smihaelが述べたように、zip -r test.zip test/*機能しません。ディレクトリ外からこれを達成する正しい方法はありますか?
アンドラム

22

zipコマンドで-jまたは--junk-pathsオプションを使用します。

ジップmanページ

-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).

これは正しい答えのようです。
Mutant_city

3
ただし、ネストされたパス/フォルダーはどうですか?
GuyPaddock

3
これにより、アーカイブ内のすべてのフォルダーが省略され、異なるフォルダーに重複したファイル名がある場合、これは爆発します。これには場所がありますが、フォルダを気にせず、ファイルだけが必要な場合のみです。OPが求めていたものではなく、まだ十分な知識
Govind Rai

17

このコマンドはどうですか?

$ cd somedir ; zip -r ../zipped.zip . * ; cd ..

5
これは正しい答えですが、紹介文はあなたが自分を納得させているようには聞こえません。コマンドが何をするのかを少し説明するのにも役立ちます。
ネフェンテ

1
これも私の解決策でしたが、を含むため嫌いcdです。保存されたパスをより正確に指定する方法があることを望んでいました。
nilskp

3

お役に立てれば。

(cd directory && zip -r ../out.zip .)

メインシェルを同じディレクトリに保持し、コマンド後に終了するサブシェルのディレクトリのみを変更します。


@Alfred UCの回答へのコメントとしてこれを追加したかったのですが、そのための評判が十分ではありません。
ケネス

それが実際に問題を解決するなら、それは解決策かもしれません。
ユフェニュイ・バイエ・ディダー

これは答えとしてより良いです。これはbashとshの両方で機能しますか?
Arlen Beiler
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.