リンクを削除する
ハードリンクとシェルリンクは、対象がファイルそのものなので、通常のファイルと同じ扱いで削除ができる。ただし、1つのファイルに複数のハードリンクが存在する場合、ファイルの削除コマンド(DELコマンドやRemove-Itemコマンド)は、指定したリンクのみの削除となる。こうしてリンクが減っていき、最後のハードリンクに対して削除コマンドが適用されたとき、ファイル自体が削除される。
シェルリンクはそれ自体が普通のファイルなので、リンクの削除は、シェルリンクファイル(.lnkファイル)を削除するだけでいい。シェルリンクは、エクスプローラー上でのみ有効なので、コマンドラインからは単なるファイルでしかない。
シンボリックリンクの場合、リンク先がファイルなのかディレクトリなのかによってコマンドが異なる。同様にジャンクションの場合、対象がディレクトリであることを認識してコマンドを使う必要がある。
cmd.exeでは、ファイルの削除には、DEL/DELETEあるいはERASEコマンドを使う。複数のコマンドがあるが機能は同じである。これに対して、ディレクトリの削除には、RMDIR/RDコマンドを使う。RDはRMDIRの省略形である。
シンボリックリンクの場合も、リンク先がファイルの場合にはリンクの削除にはDELコマンドを、リンク先がディレクトリの場合には、リンクの削除にRMDIRコマンドを使い分ける必要がある。
DELコマンドの場合、対象にディレクトリを指定すると、暗黙的に「\*」が仮定されるため、対象ディレクトリ内の消去という動作になる。このため、ディレクトリへのシンボリックリンクやジャンクションを消去する場合には、間違ってDELコマンドを使わないように注意が必要だ。
PowerShellでは、過去にシンボリックリンクやジャンクションの扱いが正しくなかったことがあるが、現在のWindows PowerShell(Ver.5.1)、PowerShell(V 7.2)では、予想可能な振る舞いをするようになった。
PowerShell/Windows PowerShellでは、rmもrmdirもともにRemove-Itemコマンドのエイリアスになっている。このRemove-Itemコマンドでは、シンボリックリンクやジャンクションを指定すると、リンクのみを消去するようになっている。
リンクを探す
cmd.exeでは、ジャンクションとシンボリックリンクはDIRコマンドに「<JUNCTION>」「<SYMLINKD>」(シンボリック・リンクでディレクトリの場合)、「<SYMLINK>」(同ファイルの場合)と表示が出る。/Sオプションでサブディレクトリをすべて表示させ、ファイルにリダイレクトしたのち、これらの文字列を探す。
ハードリンクは、cmd.exe上ではファイルごとに調べるしか方法がない。
fsutil hardlink list ファイルパス
というコマンドで指定したファイルにハードリンクがあれば、すべて表示させることができる。しかし、ファイルを1つ1つ指定して調べる必要がある。こうした用途には、PowerShellのほうが向いている。
PowerShell/Windows PowerShellでは、
Get-ChildItem <起点パス> -Recurse | Where-Object LinkType -eq HardLink
として、ハードリンクを持つファイルを探すことが可能だ。最後の部分を「Junction」「SymbolicLink」とすることでジャンクションやシンボリック・リンクを探すことができる。
シンボリックリンクは、簡単にファイルやディレクトリを他の場所から「持ってくる」ことができるため、慣れると多用しがちになる。多くのプログラムは、シンボリック・リンクをファイルやディレクトリとして扱ってくれるので問題はないのだが、バックアップや検索インデックス作成など、ソフトウェアによっては、シンボリック・リンクを意図的に排除、あるいはオプションで扱いを制御していることがあるので注意が必要だ

この連載の記事
-
第471回
PC
Windowsのコマンドラインでエイリアスを使う -
第470回
PC
Windows用のパッケージマネージャー「Winget」 プレビュー版で機能が充実してきた -
第469回
PC
Windows Updateの27年 悪役だった頃から改良が進んで、徐々に目立たない存在に -
第468回
PC
2025年のWindowsどうなる!? Windows Insider Programの状況をあらためて見る -
第467回
PC
Copilot+ PCのNPUでカメラを処理する「Windows Studio Effects」 その内容や効果は? -
第466回
PC
PowerToysの最近の新機能には、複数アプリを指定位置に起動する「ワークスペース」や新規作成のカスタマイズがある -
第465回
PC
WindowsのPowerShellからBluetoothデバイスを調べる -
第464回
PC
Windows 10のサポート切れまで1年を切った さてWindows 10マシンをどうする? -
第463回
PC
Windows Terminal Preview版でSixelグラフィックスを実際に表示させてみる -
第462回
PC
Windows Terminal Preview版でSixelグラフィックスを扱う -
第461回
PC
Copilot+ PCを買ってみたが、「今焦って買う必要はない」のかもしれない - この連載の一覧へ