web-dev-qa-db-ja.com

7-Zipコマンドラインを使用してサブディレクトリでアーカイブするにはどうすればよいですか?または、アーカイブ中にフォルダ構造をどのように保持しますか?

私はこのようなファイルがたくさんあります:

C:\G\G1\35antique-shop.mp3
C:\G\G2\35antique-shop.mp3
C:\G\G1\09saguri.mp3
C:\G\G2\09saguri.mp3

keepアーカイブ中のフォルダ構造を知りたいだけです。これは重複するものよりも重要であり、それを解決する方法を知ることはボーナスになるでしょう。

@Lamb "G1およびG2フォルダーから選択したファイルのみ(フォルダー全体ではなく)をアーカイブしますか?"

それはほとんどすべてを言いますが、私は改善しようとします:私はしたいだけではありませんmove一部の選択されたファイルのみアーカイブに。また、これらのファイルのlistもあり、各ファイルへのパス名も含まれています。

したがって、SubDir1には10個のファイルがあり、そのうち3個をZipしたい場合があり、SubDir1\sub2には5個のファイルがあり、5つすべてをZipしたい場合があります。アーカイブする必要があるファイルはリストファイルにあります。

ファイルが重複している可能性があるので、サブディレクトリを追加すると、7-Zipはそれらを重複として認識しないことを願っています。

そして、私はそれをコマンドラインで行うのが好きです。

私はこのようなバッチファイルを試しました:

7z a -r MyArchive.7z C:\G\G1\35antique-shop.mp3
7z a -r MyArchive.7z C:\G\G2\35antique-shop.mp3
7z a -r MyArchive.7z C:\G\G1\09saguri.mp3
7z a -r MyArchive.7z C:\G\G2\09saguri.mp3

これは、01antique-shop.mp3、02antique-shop.mp3、...、33antique-shop.mp3および34antique-shop.mp3までのファイルはアーカイブしないでください。

フォルダ名(=サブディレクトリ)がMyArchive.7zに追加されていません。これが問題です。

明らかに、リストファイルでコマンドを1つだけ使用したいのですが、それも機能しません。

私はもう試した:

7z a -mx0 -tzip C:\$$-edrive\F-G-H.Zip @fgh.txt

これは実際には選択に関してはかなりうまく機能しますが、ディレクトリ構造は保持されません。悲しいことに。

どうすればよいですか?

16

7-Zipの最新の安定バージョン(15.14)には、絶対パスストレージを有効にするスイッチ-spfがあります。

たとえば、ファイルlist.txt

C:\tmp\dir1\file.txt
C:\tmp\dir2\file.txt

コマンド 7z a p.7z -spf @list.txtは、リストにあるとおりの絶対パスを格納するアーカイブを生成します。または、コマンド7z a p.7z -spf2 @list.txtはドライブ文字を削除します:

tmp\dir1\file.txt
tmp\dir2\file.txt

ファイルlist.txt

dir1\file.txt
dir2\file.txt

コマンド 7z a p.7z @list.txtは、バージョン9.20と15.14の両方で、リストにあるとおりの相対パスを格納します。

スイッチ-spfを使用してさらにテストを行いました。結果は here です。

12
Marco

サブディレクトリがあるディレクトリをアーカイブする 以下を使用

7z.exe a - t7z NewArchivePath PathOfFolderToArchive
9
Eric Roper

代わりにこれを試してください:

cd /d C:\
7z a MyArchive.7z G\G1\35antique-shop.mp3
7z a MyArchive.7z G\G2\35antique-shop.mp3
7z a MyArchive.7z G\G1\09saguri.mp3
7z a MyArchive.7z G\G2\09saguri.mp3

問題は、適切なパスストレージオプションのために人々が years を要求してきたようです( マルチボリュームアーカイブを変更する機能 と同じように) 、しかし著者は興味がないようです。それが、WinRARを使い始めた理由の1つです。


リストファイルがある場合、アーカイブするファイルが単一の最上位ディレクトリを共有しない場合、7-Zipはパスをしないに保存します。たとえば、以下を含むInput.txtがある場合:

C:\path to\file1.ext
D:\path to\file1.ext
E:\path to\file1.ext

7z a MyArchive.7z @Input.txtを実行すると、パスが完全に取り除かれていることがわかります。これは、私にとっては完全に逆のように見えます(OTOH rar a MyArchive.rar @Input.txtがうまく機能します)。

したがって、7-Zipの欠陥を克服するために、次のようにバッチファイルを使用できます。

for /f "tokens=1* delims=\" %%i in (Input.txt) do (
    pushd %%i\
    7z a D:\MyArchive.7z "%%j"
    popd
)

注:D:\MyArchive.7zを宛先アーカイブへの適切なパスに置き換えます。また、バッチファイルは、リストファイルでパスを引用符で囲んでいるかどうかに関係なく機能するはずです。


編集:リストファイルが次のようになっている場合:

"C:\$$-edrive\F\faithless.-.long.way.mp3"
"C:\$$-edrive\G\Antique Shop.mp3"

または

"\$$-edrive\F\faithless.-.long.way.mp3"
"\$$-edrive\G\Antique Shop.mp3"

次に、次のように編集します。

"$$-edrive\F\faithless.-.long.way.mp3"
"$$-edrive\G\Antique Shop.mp3"

ここで、アーカイブする all ファイルがC:\$$-edriveの下にあると想定して、C:\に移動し、7z a C:\MyArchive.7z @C:\Input.txtを実行します。リストファイルを使用すると、パスが保存されます only ドライブ文字が存在せず、最初のバックスラッシュがなく、トップレベル(ルート)ディレクトリがすべてのファイルで同じ場合。また、最良の結果を得るには、C:\ $$-edriveにMyArchive.7zを作成しないことをお勧めします。

7
Karan

重複をどのように助けるかわからない。ただし、私は、listfile.txtを作成することで、完全なコマンドを1つにまとめたバッチよりも便利なシステムになると思います。

 C:\G\G1\35antique-shop.mp3
 C:\G\G2\35antique-shop.mp3
 MyArchive.7z C:\G\G1\09saguri.mp3
 MyArchive.7z C:\G\G2\09saguri.mp3

そして、それらすべてを7z a -r -tzip archive.Zip @listfile.txtで圧縮します

0
Cosine

Totalcmd "tot-Zip.bat"で使用するbatスクリプトを作成しました。

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

set "TOP_DIR="D:\Grabovsky""
set "archname="%TOP_DIR%\Arch.Zip""
set "filelist= "
cd %TOP_DIR%
for %%A in (%*) do (
    set ondisk_path="%%~dpnxA"
    set inarch_path=!ondisk_path:%TOP_DIR%\=!
    echo Putting !ondisk_path! to !inarch_path!.
    set "filelist=!filelist! !inarch_path!"
)
echo filelist: %filelist%

7z.exe a -tzip %archname% %filelist% > NUL
pause

次に、totalcmdでそのショートカットを作成します。 enter image description here

次に、一部のファイル/フォルダを圧縮して%TOP_DIR%に関連するフォルダ構造を保持する場合は、必要なファイル(%TOP_DIR%内のどこか)を選択してボタンを押すだけです。

0
grabantot

7-Zipはそれらを重複と見なし、スキップします。それを回避する方法があるなら、私はそれを見つけられませんでした-私はいつも仕事をいくつかのアーカイブに分割するだけです。

0
MT_Head