
ハードリンクを作成して、同じドライブ (NTFS 形式) 上のフォルダーの複製を作成する方法はありますか? 次のようなことを実行したいと考えています: XCOPY E:\TEMP\SAMPLE1* E:\TEMP\SAMPLE2\ /s ただし、実際にファイルをコピーして余分なドライブ領域を使用するのではなく、ファイルへのハードリンクを作成します。
目標: SAMPLE2 フォルダーには不要なファイルがいくつかあるだけで、それらすべてを SAMPLE1 に保持します。SAMPLE2 フォルダーは、最終的に別のドライブにコピーされます。
注: SAMPLE1 の合計コンテンツは約 400 GB (複数のサブフォルダーが含まれています) で、SAMPLE2 から除外する各ファイルはそれぞれ約 20 ~ 40 MB です (さまざまなサブフォルダーに 100 を超える多数のファイルがあります)。
ハードリンクを使用することを除いて XCOPY (上記のコマンド) と同等のことを実行する方法はありますか? 次に、SAMPLE2 内の不要なファイルをすべて削除してから外部ドライブにコピーし、SAMPLE2 フォルダーを削除します。
答え1
ちょっとしたハックですが:
- GUI を使用して通常の完全コピーを作成します。コピー/貼り付けなど。ディスク領域がなくなるのを確認します。
- ソースを参照に設定し、重複を「通常」として DupeGuru を実行します。
- レポートが完了したら、「すべて選択 > 削除」を実行し、「ハードリンクとして再作成」オプションにチェックを入れます。シンボリックリンクも作成できます。ディスク領域をいくらか回復する必要があります。私は、スクリプトを使用して構造内の他の多くのファイルを削除した後、アップロードするフォルダーを準備するために、これを時々使用します。
ボーナス: Mac、Windows、Linux で動作します。素晴らしい!https://dupeguru.voltaicideas.net/
答え2
サードパーティのソフトウェアは必要ありません。これは以下で実現できます。パワーシェル以下は、ソース パス ($Path) と「ミラー」パス ($MirrorPath) を受け取るパイプライン対応関数です。ソース パスとサブフォルダー内のファイルへのハードリンクをミラー パスに設定し、ソース サブフォルダーと一致させます。ソース サブフォルダーも再帰的に設定されます。
Function Mirror-Path {
Param(
[Parameter(Mandatory,ValueFromPipeline,Position=0)]
[String[]]
$Path,
[Parameter(Mandatory,Position=1)]
[String]
$MirrorPath
)
Begin{
If ( ! ( Test-Path $MirrorPath )) {
mkdir $MirrorPath -Force | out-null
}
}
Process{
ForEach ( $Target in $Path ) {
If ( Test-Path $Target ) {
Resolve-Path $Target | gci -File | ForEach {
New-item -ItemType Hardlink -Path $MirrorPath -Name $_.Name -Target $_.FullName | out-null
}
Resolve-Path $Target | gci -Directory | ForEach {
Mirror-Path $_.FullName ( Join-Path $MirrorPath $_.Name )
}
}
Else {
Echo "'$Target' is not a valid path."
}
}
}
End {}
}
答え3
これは理論上は簡単です。ディレクトリのシンボリック リンクを作成する必要があります。これは、まさに必要なことを行います。ユーザーとプログラムに対して、実際のファイルのように見え、動作するショートカットをコピーします。次に、不要なシンボリック リンクを削除すると、リンクのみが削除されます。その後、通常のように残りの「ファイル」(実際にはリンク) をコピーすると、実際のファイルがコピーされます。
しかし、Windows は GUI ベースであり、シンボリック リンクを作成するための GUI ソリューションは組み込まれていません。また、コマンド プロンプトも困難でした。(Linux を使用している場合は、ターミナル経由で簡単に実行できます。また、GNOME Commander などの一部のグラフィカル ファイル マネージャーでも、GUI 経由で簡単に実行できます。)
ということで、上記の解決策を実行するための「簡単な方法」は、プラグインとサポート ファイルをダウンロードすることです (必要な場合は、ダウンロード ノートを読んでください)ここ これにより、右クリック メニューにシンボリック リンク オプションが追加されます。必要なオプションは、ディレクトリを「コピー」するための「リンク ソースを選択」、次に貼り付けるための「名前を付けてドロップ > ハードリンク クローン」です。リンクされたディレクトリで、ファイル (リンク) などを削除するなど、必要に応じて操作します。次に、通常のコピーと貼り付け (リンクを選択して名前を付けてドロップしない) で任意の場所に貼り付けると、ショートカットがファイルとしてコピーされます。
最後に、リンクされたフォルダーを削除すると、何も起こらなかったかのようになります。
このプラグインはうまく機能しているようです。ぜひお試しください。ただし、ハード リンクのみ (ソフト リンクやジャンクションは不可) を作成し、実際のファイルではなくリンクを操作するように注意してください。
さて、mklink について言及する人のために、この回答を作成中に私が遭遇したことをここに記します。管理者として実行しているコマンド プロンプト (CMD を検索し、右クリックして管理者として実行) 経由で mklink を使用すると、同じように動作するはずです... しかし、私の場合はそうではありませんでした (検索すれば、他にも多くのユーザーがそうでした)。secpol.msc 経由で権限を変更した後でも、アクセスが拒否されました。これはよくある問題のようです。
答え4
リンクシェル拡張
このユーティリティは、Windowsエクスプローラのコンテキストメニューにシェル拡張を追加し、ドラッグ&ドロップによる作成を可能にします。ハードリンク、ジャンクションそしてシンボリックリンクこれは本当に古く、1999 年に最初に作成されましたが、現在も更新されており、期待どおりに動作します。これが最もユーザーフレンドリーなソリューションであると信じています。