web-dev-qa-db-ja.com

7ZipforceはNTFSジャンクションを無視します

Windows 1803、7z 18.05

上記の構造の一部を参照する複数のNTFSジャンクションを持つフォルダ構造をアーカイブおよび圧縮しようとしています(つまり、「外部」リンクがありません)-7Zipがジャンクションを解決せずに構造を圧縮して、重複が発生する可能性はありますか?

ジャンクションを保持するのは適切であり、ジャンクションを空のフォルダーとしてアーカイブすることもできますが、アーカイブサイズが絶対的に優先されます。

フォーマットとしてtarまたはwimを選択すると、NTFSシンボリックリンクに関するオプションがありますが、圧縮は含まれていないようです(storeのみが圧縮レベルとして表示されます)-必要があります後で圧縮します。これは不要な中間ステップのようです。

アーカイブする前にジャンクションを削除することはできますが、可能であれば削除したくありません。

2
kamikatze13

私は2つのステップで行くことをお勧めします:

  1. フォルダ内のすべてのジャンクションのリストを生成します
  2. リスト内のファイルを除外しながら、フォルダーから7Zipアーカイブを作成します。

最初のステップとして、コマンドプロンプトで次のコマンドを使用できます。

dir /AL /S /B your-folder > exclude.txt

どこ :

  • /Aは特定の属性を持つすべてのファイルを表示し、Lは再解析ポイント(シンボリックリンクとディレクトリジャンクション)を指定します
  • /Sコマンドを再帰的にします
  • /Bは、ファイル名のみのベアフォーマットを指定します。

フォルダを圧縮するときは、 -x(ファイル名を除外)スイッチ :を使用します。

7z a archive.7z folder\ [email protected]
2
harrymc

@harrymcの回答を補完し、必要に応じて"ジャンクションを保持するのは適切です。ジャンクションを空のフォルダーとしてアーカイブすることもできますが、アーカイブサイズが絶対的に優先されます。"ジャンクションを保存できます。プレーンテキストファイルとして、次に@harrymcによって提案された[email protected]を使用した7Zip。このようにして、ジャンクションの同じ宛先に「偽の」.junctionファイルを作成することを犠牲にして、両方の要件をカバーします。

すべてのジャンクションを再帰的に追跡する必要があります。各ジャンクションについて、置換名を抽出してファイルに保存します。

for /d /r %%a in (%1\*) do if exist %%a\nul call :storejunction "%%~dpnxa"
goto :eof

:storejunction
set attribs=%~a1
if not "%attribs:~-1%" == "l" goto :eof
for /f "tokens=3*" %%b in ('junction %~s1 ^| find "Substitute Name:"') do set "jname=%%b"
echo %jname% >"%~f1.junction"
goto :eof
0
PA.