How to create a directory hard link in Windows?

37,589

Solution 1

I think that hard links are for files only and not directories.

Solution 2

There is no such thing as a hard link to a directory in Windows. In Windows, you either create a symbolic link to a directory by using the command mklink /d link_name target_dir or you create a junction with mklink /J link_name target_dir.

Differently of hard links, junctions may span multiple volumes and are sometimes called "soft links" by Microsoft, as you can read here:

A junction (also called a soft link) differs from a hard link in that the storage objects it references are separate directories, and a junction can link directories located on different local volumes on the same computer.

Some caveat is required here since Microsoft's nomenclature is not really neat but, in a few words, these are your options to create references to files and directories in Windows:
(1) shortcuts: files whose content is the location of another file. It works more or less like a soft link, with a crucial difference though: it is NOT a directory entry, the link information is stored inside the file. For this reason, it doesn't work with many applications (at least, it works as it is supposed to within the Windows Explorer...);
(2) hard links: created with the command mklink /h. Valid for files only and works within a given volume (i.e., just like in Linux, you cannot hard-link a file in another partition nor in a network drive);
(3) junctions: this beast is really weird. It works with directories only, and - funny thing - can point to directories in other file systems;
(4) symbolic links: it is much like in Linux, and works with directories and files, too. (But tends to require Administrator privileges, which can make it rather inconvenient.) As I mentioned above, it is created with the command mklink /d link_name target_dir for directories (and mklink link_name target_file for files). You can read more about this here.

Share:
37,589

Related videos on Youtube

Pacerier
Author by

Pacerier

# 9

Updated on September 18, 2022

Comments

  • Pacerier
    Pacerier over 1 year

    I was trying to create a directory hard link (not a symbolic one).

    I've tried this: mklink /d /h newfolder currentfolder but it's telling me Access is denied. I don't understand how is access denied because I'm running batch as administrator.

    How do we create a directory hard link?

    ==
    Windows Vista Home Premium SP2

  • user1686
    user1686 over 12 years
    Hardlinks for directories are technically possible, but need great care to avoid loops in the filesystem. The only OS which allows them is Mac OS X 10.5, for use in Time Machine.
  • Synetech
    Synetech over 12 years
    > I think that hard links are for files only and not directories. Thanks for the confirmation; I keep intending to read up on symlinks and such: 1 2 3 4
  • DJCrashdummy
    DJCrashdummy over 8 years
    well... under linux-systems you can use mount --bind for folders but i'm not sure if there is something similar in windows!
  • Sz.
    Sz. over 6 years
    Humberto, I kinda like your answer, but there are two problems: 1. The "Otherwise, junctions operate identically to hard links" part in the MSDN quote is dangerously wrong: a profound difference is that a hard link behaves identically to its "target" (or "sibling", actually...) file in that no matter which one you delete, the other will stay unaffected. Junctions (like other soft links) lack this important symmetry. 2. The reference to Joseph's answer makes no sense. +1: "things you can create to point to file system entities (files and directories)" should be "... (files or directories)".
  • Humberto Fioravante Ferro
    Humberto Fioravante Ferro over 6 years
    @Sz you were totally right, and I modified my answer according to your comments (indeed, the answer was a bit fuzzy). Thanks!
  • Sz.
    Sz. over 6 years
    Thanks for the follow-up! I failed to point out in my prev. comment that distancing junctions from soft (or sym-) links and trying to relate them to hard links instead ("It is like a hard link, ...") is still a bit off. Junctions really are soft links, in fact they are very much unlike hard links in almost every respect. (Hard links are low-level filesystem objects quite transparent to fs. operations, and e.g. can't "break", once created, unlike other link types that are called "soft" exactly for this reason.) (I'll edit the a. to show what I mean, feel free to reject/adjust. Cheers!)
  • Phani Rithvij
    Phani Rithvij about 3 years
    Instead of target, we could use source here which resolves the confusion