web-dev-qa-db-ja.com

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

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

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

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

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

24
Dami

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

例:

/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;
21
zzbomb

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

Zip 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).
18
robrtsql

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

$ cd somedir ; Zip -r ../zipped.Zip . * ; cd ..
16
Alfred UC

お役に立てれば。

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

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

0
Kenneth