Windowsコマンド(fsutil hardlink)

もうずっと、fsutilにハマっています。最初は打ちにくかったfsutilという名前も、入力しやすくて覚えやすい名前だなあと分かってきました。
今回は、hardlinkを使います。
ハードリンクの作成には、createサブコマンドを使います。

C:\Users\takk2>fsutil hardlink create
使用法 : fsutil hardlink create <新しいファイル名> <既存のファイル名>
    例 : fsutil hardlink create c:\foo.txt c:\bar.txt

C:\Users\takk2>

まず適当にファイルを作成し、

C:\Users\takk2\tmp>echo HELLO>a.txt

C:\Users\takk2\tmp>dir
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は 6C92-6118 です

 C:\Users\takk2\tmp のディレクトリ

2019/03/02  02:05    <DIR>          .
2019/03/02  02:05    <DIR>          ..
2019/03/02  02:05                 7 a.txt
               1 個のファイル                   7 バイト
               2 個のディレクトリ  194,024,587,264 バイトの空き領域

C:\Users\takk2\tmp>

ハードリンクを作成。右から左へリンクするので注意が必要です。Linuxのlnコマンドとは逆の指定です。

C:\Users\takk2\tmp>fsutil hardlink create b.txt a.txt
C:\Users\takk2\tmp\b.txt <<===>> C:\Users\takk2\tmp\a.txt のハードリンクが作成されました

C:\Users\takk2\tmp>

中身は確認できるでしょうか。

C:\Users\takk2\tmp>type b.txt
HELLO

C:\Users\takk2\tmp>

元のファイルを削除してみます。

C:\Users\takk2\tmp>type b.txt
HELLO

C:\Users\takk2\tmp>

ハードリンクした方のファイルは消えませんでした。

次は、File IDを確認したいと思います。b.txtのハードリンクa.txtを作成し、両者のFileIDを確認します。

C:\Users\takk2\tmp>fsutil hardlink create a.txt b.txt
C:\Users\takk2\tmp\a.txt <<===>> C:\Users\takk2\tmp\b.txt のハードリンクが作成されました

C:\Users\takk2\tmp>fsutil file queryFileID a.txt
ファイル ID は 0x0000000000000000000b000000017791 です

C:\Users\takk2\tmp>fsutil file queryFileID b.txt
ファイル ID は 0x0000000000000000000b000000017791 です

C:\Users\takk2\tmp>

同じIDですね。つまりファイルコピーではありません。内容を変更すると分かりますね。

C:\Users\takk2\tmp>type a.txt
HELLO

C:\Users\takk2\tmp>echo AAAA>>a.txt

C:\Users\takk2\tmp>type a.txt
HELLO
AAAA

C:\Users\takk2\tmp>

では、b.txtの内容も確認。

C:\Users\takk2\tmp>type b.txt
HELLO
AAAA

C:\Users\takk2\tmp>

両ファイルは同じファイルですね。なかなか使えそうなコマンドです。

コメント

タイトルとURLをコピーしました