Windows 1803、7z 18.05
上記の構造の一部を参照する複数のNTFSジャンクションを持つフォルダ構造をアーカイブおよび圧縮しようとしています(つまり、「外部」リンクがありません)-7Zipがジャンクションを解決せずに構造を圧縮して、重複が発生する可能性はありますか?
ジャンクションを保持するのは適切であり、ジャンクションを空のフォルダーとしてアーカイブすることもできますが、アーカイブサイズが絶対的に優先されます。
フォーマットとしてtar
またはwim
を選択すると、NTFSシンボリックリンクに関するオプションがありますが、圧縮は含まれていないようです(store
のみが圧縮レベルとして表示されます)-必要があります後で圧縮します。これは不要な中間ステップのようです。
アーカイブする前にジャンクションを削除することはできますが、可能であれば削除したくありません。
私は2つのステップで行くことをお勧めします:
最初のステップとして、コマンドプロンプトで次のコマンドを使用できます。
dir /AL /S /B your-folder > exclude.txt
どこ :
/A
は特定の属性を持つすべてのファイルを表示し、L
は再解析ポイント(シンボリックリンクとディレクトリジャンクション)を指定します/S
コマンドを再帰的にします/B
は、ファイル名のみのベアフォーマットを指定します。フォルダを圧縮するときは、 -x(ファイル名を除外)スイッチ :を使用します。
7z a archive.7z folder\ [email protected]
@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