web-dev-qa-db-ja.com

アーカイブにディレクトリ名を追加せずにディレクトリからアーカイブを作成する

私は以下のフォルダ構造を持っています:

  • ルート
    • folder1
    • folder2
    • folder3
    • 7za.exe

7-Zipコマンドラインツールを実行して、folder1内のすべてのファイルをfolder1.ZipというZipファイルに圧縮します。

以下を実行する

7za.exe a -tzip folder1.Zip folder1\\*.*

期待どおりZipファイルを生成します。しかし、Zipファイルを開くと、その中にfolder1という名前のフォルダーがあり、その中にそのフォルダーの中にあるすべてのファイルがあります。 Zipフォルダにフォルダ名を追加したくありません。つまり、すべてのファイルを "Flat"ファイル形式で追加したいのです。

私はまた、個々のファイル/フォルダごとにコマンドラインツールを再帰的に実行したくありません。

この機能を提供するスイッチはありますか?

77
gg.

7-Zipヘルプ ファイルから:

(追加)コマンド

アーカイブにファイルを追加します。

7z a archive1.Zip subdir\

フォルダーsubdirからアーカイブarchive1.Zipにすべてのファイルとサブフォルダーを追加します。アーカイブ内のファイル名にはsubdir \プレフィックスが含まれます。

7z a archive2.Zip .\subdir\*

フォルダーsubdirからアーカイブarchive2.Zipにすべてのファイルとサブフォルダーを追加します。アーカイブ内のファイル名にはsubdir\prefixは含まれません。

cd /D c:\dir1\

7z a c:\archive3.Zip dir2\dir3\

アーカイブc:\ archive3.Zipのファイル名にはdir2\dir3\prefixが含まれますが、c:\ dir1\prefixは含まれません。

だからあなたが望むコマンドは次のようになります。7za.exe a folder1.Zip .\folder1\*

また、7-Zipのワイルドカードの取り扱いにも注意してください。 *.*を「すべてのファイル」として扱うのではなく、「ファイル名にピリオドを含むすべてのファイル」という意味です。拡張子のないファイルは見逃されるでしょう。本当にすべてのファイルが必要な場合は、代わりに*を使用してください。

最後に、アーカイブファイル名が-tzipで終わっている場合、.Zipパラメータは必要ありません。 7-Zipは、そのような場合に必要なフォーマットを判断するのに十分スマートです。カスタム拡張機能が必要な場合にのみ必要です(例:Mozillaアドオンの場合は7za.exe a -tzip foo.xpi <files>)。

127
afrazier

これは私のために働きました

C:\ Parent\SubFoldersのようなフォルダ構造を考えてみてください。そして、C:\ Parentという親フォルダなしのすべてのファイルとフォルダを含むparent.Zipを作成します[つまり、SubFoldersから始まります.....]。

cd /D "C:\Parent"

"7z.exe" a Parent.Zip "*.*" -r

これは、C:\ ParentにParent.Zipを作成します。

2

受け入れられた答えを拡大するために(私はそこにコメントを追加することができませんでした):

Linuxでは '*'を追加してもうまくいきませんでしたので、より冗長なコマンドラインを作成しました。

curr_dir=$(pwd); \ 
cd source_code/lambda/ ; \
7z a ../../lambda.Zip .; \
cd $curr_dir \
unset curr_dir

===========

スクリプトの説明

  • 後で使用するために現在のディレクトリパスを保存します。
  • アーカイブする必要があるディレクトリに移動します。
  • アーカイブを作成します(最後に「。」(ドット)が付きます)。
  • 元のディレクトリに戻ります。
  • 元のディレクトリパスを格納していた変数を削除します

私はそれが誰かに役立つかもしれないと思います。

0
Humanier