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


83

次のフォルダー構造があります。

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

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

以下を実行する

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

期待どおりにzipファイルを生成します。ただし、zipファイルを開くと、というzip folder1というフォルダーがあり、その中にそのフォルダー内にあったすべてのファイルがあります。zipフォルダーにフォルダー名を追加したくない、つまり、すべてのファイルを「フラット」ファイル形式で追加したい。

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

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


することができますcdのfolder1にして7za.exe a -tzip ..\folder1.zip *.*
-zpletan

回答:


136

7 -ジップヘルプファイル:

(追加)コマンド

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

7z a archive1.zip subdir\

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

7z a archive2.zip .\subdir\*

フォルダーsubdirのすべてのファイルとサブフォルダーをアーカイブarchive2.zipに追加します。アーカイブ内のファイル名には、subdir \プレフィックスは含まれません。

cd /D c:\dir1\

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

アーカイブc:\ archive3.zipのファイル名にはdir2 \ dir3 \プレフィックスが含まれますが、c:\ dir1 \プレフィックスは含まれません。

したがって、必要なコマンドは次のようになります。 7za.exe a folder1.zip .\folder1\*

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

最後に、-tzipアーカイブファイル名がで終わる場合、パラメーターは必要ありません.zip。7-Zipは、これらの場合にどの形式を使用するかを判断するのに十分スマートです。カスタム拡張機能が必要な場合にのみ必要です(7za.exe a -tzip foo.xpi <files>Mozillaアドオンなど)。


2

これは私のために働いた

C:\ Parent \ SubFolders .....のようなフォルダ構造を検討します。そして、親フォルダなしですべてのファイルとフォルダC:\ Parentを含むparent.zipを作成します[つまり、SubFolders .....から開始します]

cd /D "C:\Parent"

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

これにより、C:\ ParentにParent.zipが作成されます


2
これにより別の回答が複製され、新しいコンテンツは追加されません。実際に何か貢献できるものがない限り、回答を投稿しないでください。
DavidPostill

私が解決策を探していたとき、私はこの解決策を正確に得ることができませんでした。明らかに、オンラインで見つけたいくつかの答えをコピーして貼り付けるだけではありません。私はそれに時間を費やしているので、共有すべきだと感じました。私によると、この正確な答えはここと、私が投稿したStack Overflowにあります。
プリテシュドックホール

7-Zipは*.*「すべてのファイル」を意味するのではなく、「ファイル名の一部としてピリオドを含むすべてのファイル」を意味することに注意してください。したがって、この答えは実際には拡張子のないファイルを省略します(これは受け入れられた答えに記載されています)。
Bill_Stewart

1

受け入れられた答えを拡張するだけです(そこにコメントを追加できませんでした):

Linuxでは、「*」を追加しても機能しなかったため、より詳細なコマンドラインを作成して、目的の結果を得ました。

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

===========

スクリプトの説明:

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

それが誰かに役立つことを願っています。


*引用符で囲むことをお勧めします(そうしないと、シェルはこの場所でファイルに展開します)。
サイモンソビッシュ

-1

これはどう。例:Folder / subFolder1、Folder / subfolder2

すべてのサブフォルダーを選択>右クリックしてアーカイブを作成>任意の形式を選択

*アーカイブ名は親フォルダになります。

簡単でしょう?


3
問題は、GUIの使用方法ではなく、7-zipのCLIについてです。GUIの使用方法を学習するのは、物事を自動化する場合には意味がありません。
ビンキ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.