web-dev-qa-db-ja.com

パスを保存せずに7zを使用してファイルのみを圧縮する

Zipファイルに対して7zコマンドライン実行可能ファイルを使用していますが、アーカイブに追加する際にファイルのパスがアーカイブに保存されることがわかります。

だから

7z a -tzip  myzip.Zip dir1\dir2\*

アーカイブmyzip.Zipには、パスdir1\dir2が含まれます。これは必要ありません。むしろ、パスを保存せずに、ファイルのみをZipファイルに追加したいです。私はかなり検索しましたが、これを行う方法を見つけられないようです。おそらく明らかな何かを見逃していますか?

ありがとう

33
Raam

完全なパスを指定します。うまくいくはずです。現在の場所からの相対パスではありません。たとえば、man5フォルダー内のファイルをアーカイブする場所を以下に示します。

$ 7z a -tzip myzip.Zip /home/pradeeban/Desktop/man4/man5/*

Zipにはファイルのみが含まれ、ディレクトリは含まれていません。

次に、相対パスのみを指定しました。 Zip内にディレクトリがありました。

$ 7z a -tzip myzip.Zip Desktop/man4/man5/*

Linux(Ubuntu 12.04)で試しました。それがWindowsと異なるかどうかはわかりません。

24

パスの前にドットを追加するだけです。つまり、7z a -tzip -r myzip.Zip .\Relative\Dir\*

70

相対パスを使用してこれを行う方法を発見しました。

7z a -tzip  myzip.Zip %CD%\dir1\dir2\*

%CD%は、Windowsバッチファイルで現在のパスを取得する方法ですが、コマンドラインからも機能します。 バッチファイルから現在のディレクトリをキャプチャする に関する詳細情報。

11
NightOwl888

7-ZipユーザーFAQ の関連する質問で説明されているように、7zは作業ディレクトリへの相対パスを格納するため、最初にcdをアーカイブ用の最上位ディレクトリに移動して実行する必要があります7 -ここからジップ。

cd dir1\dir2\
7z a -tzip  myzip.Zip *

スクリプトから実行し、変更されたディレクトリに影響を与えたくない場合は、選択したシェルで使用可能なディレクトリプッシュ/ポップ機能を使用するか、スポーンプロセスでcd + 7-Zipを実行して、変更されたディレクトリでスクリプト全体に影響を与えないようにします。たとえば、Windowsの起動を使用すると次のようになります。

start /D dir1\dir2\ /wait 7z a -tzip  myzip.Zip *
3
Oleg V. Volkov

これは私のために働いた

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

cd /D "C:\Parent"

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

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

1