Как я могу найти жесткие ссылки в Windows?
Я создал несколько жестких ссылок в моей файловой системе Windows 7, используя mklink. Это было некоторое время назад, и я не могу точно вспомнить, где и какие файлы. Когда я использую Проводник, все файлы выглядят одинаково. Когда я использую командную строку и набираю "dir", они все выглядят одинаково.
Как мне найти жесткие ссылки? Или как определить, является ли конкретный файл жесткой ссылкой?
9 ответов
Все файлы являются жесткими ссылками, с количеством ссылок не менее 1.
Вот почему файлы выглядят одинаково. Они одинаковы. Похоже, что вы ищете файлы, в которых имеется более одной ссылки на файл. Очень мало, что отличает файл с числом ссылок больше единицы от файла с числом ссылок один… кроме количества ссылок (и некоторого странного поведения в отношении атрибутов и отметок даты).
И это очень легко проверить с find
команда, входящая в состав служебного инструментария Microsoft SFUA, которая работает в подсистеме для приложений на основе Unix:
находить. -линки +1
В Windows 7 используйте команду:
fsutil hardlink list MyFileName.txt
В нем перечислены все жесткие ссылки на файл с именем MyFileName.txt
,
К сожалению, ОС не может найти все ваши жесткие ссылки, не просматривая каждый файл.
Для Explorer вы можете загрузить очень удобное расширение Link Shell, которое накладывает на файлы жесткие ссылки красной стрелкой, похожей на ярлык.
Это также делает довольно легким создание жестких ссылок, символических ссылок и соединений через контекстное меню Проводника.
Бонус болтовни:
Технически все файлы являются жесткими ссылками. Таким образом, вы действительно ищете файлы с более чем одной жесткой ссылкой.
Простой способ для одноразовых проверок: меняются ли атрибуты файла вместе?
Если вы хотите проверить, есть ли файлы A
а также B
являются жесткими ссылками на один и тот же контент, и вы не хотите ничего устанавливать или запускать, откройте окно свойств файла A
и переключить, например, его атрибут только для чтения . Теперь откройте окно свойств файла B
чтобы увидеть, есть ли изменение атрибута (файла A
) состоялся и здесь. Если да, то ответ положительный.
Почему это работает? Потому что связанные жесткие ссылки имеют одинаковый набор атрибутов файла и отметок времени.
Это сказало, что тот же самый тест может быть сделан с отметками времени файлов, но они не могут быть изменены так же легко как флаг Только для чтения , чтобы выполнить проверку.
Я написал программу, которая ищет в каталоге (возможно, рекурсивно) любые ссылки. Он может выводиться на стандартный вывод или в виде таблицы, разделенной табуляцией (tsv), для чтения в Excel/Libreoffice.
Исходный код можно найти в моем репозитории Github JavaScriptDude/find_links.
find_links - Finds any kind of link in windows
Usage: find_links -p <path> [-r] [-x] [-t] [-f <filter>]
-path | -p: Path to search (required)
-recurse | -r: recursive search
-exec | -x: Open tsv using explorer
-tsv | -t: Output in tsv format (tab separated)
-filter | -f: Filter the target using optional wildcards Eg: *foo*
Нет необходимости ничего скачивать.
Вы можете перейти в нужную папку и выполнить рекурсивный поиск:
echo off & for /F "delims=" %A in ('dir /s /b') do echo. & fsutil hardlink list "%A"
Одна изолированная линия означает, что это обычный файл.
Две соседние линии означают, что это HardLink.
Это работает как в Windows 10, так и в 11, загрузка не требуется. Основная идея: используйте командную строку (рекомендуется повышенная версия). Перейдите к папке, которую хотите проверить. Выполните эту команду, чтобы просмотреть ВСЕ ФАЙЛЫ в папке и подпапке, поэтому не делайте большой диск сразу. Как отмечено ниже, файлы с жесткими ссылками появятся дважды.
echo выключить и для /F "delims=" %A in ('dir /s /b') сделать echo. & список жестких ссылок fsutil "%A" > "%UserProfile%\Desktop\HardLinks.txt"
Одна изолированная линия означает, что это обычный файл. Вы можете игнорировать это. Две линии вместе означают, что это жесткая ссылка. Верхний путь будет относиться к жесткой ссылке, а нижний путь — к ее целевому источнику.
В первой части статьи обсуждается листинг символических ссылок и точек соединения.
Ссылка:https://www.elevenforum.com/t/find-all-symbolic-links-and-junction-points-in-windows.4225/
В данный момент я занят налогами, но мне кажется, что было бы довольно просто написать простой скрипт для удаления повторяющихся списков и вывода только жестких ссылок. Может быть, я спрошу у сына.
Powershell:
gi C:\windows\notepad.exe | % { $_.LinkType; $_.Target }
В поле LinkType установлено значение «HardLink», если существует более одной жесткой ссылки (обычные файлы имеют 1), а в Target перечислены другие цели.