Вам не обязательно загружать дополнительные программы, чтобы перечислять соединения, символические и жесткие ссылки, но если у вас есть определенные требования к формату вывода, они могут помочь.
Перечислите все каталоги соединений, символических ссылок и символических ссылок в текущем каталоге и его подкаталогах:
dir /al /s
Или, если вы хотите, чтобы они перечислены отдельно ...
Перечислите все соединения в текущем каталоге и его подкаталогах:
dir /al /s | findstr "<JUNCTION>"
Перечислите все символические ссылки в текущем каталоге и его подкаталогах:
dir /al /s | findstr "<SYMLINK>"
Перечислите все каталоги символических ссылок в текущем каталоге и его подкаталогах:
dir /al /s | findstr "<SYMLINKD>"
l
Флаг атрибут является ключевым здесь; l
предназначен для Reparse Points
(переходы, символические ссылки и каталоги символических ссылок)
Жесткие ссылки
К сожалению, dir
жесткие ссылки перечислены как обычные файлы, поэтому вы не можете использовать их для идентификации жестких ссылок. Вы используете встроенный fsutil
вместо этого. Он должен быть запущен из командной строки с повышенными правами.
С помощью fsutil
, перечислите все жесткие ссылки в текущем каталоге и его подкаталогах:
for /F "usebackq tokens=2* delims=:" %G in (`forfiles /s /c "cmd /c fsutil hardlink list @path | findstr /n .* | findstr /b /v 1"`) do @fsutil hardlink list "%G" & echo.
Этот однострочник не идеален, и я бы приветствовал любые улучшения.
- Использование
forfiles
с подкаталогами recurse ( /s
) забило мой процессор и заняло некоторое время.
- По
fsutil
сути, в конечном итоге работает в два раза; первый раз для идентификации жестких ссылок путем подсчета количества строк вывода, возвращаемых каждым вызовом, и второй раз для только что найденных жестких ссылок для получения правильного вывода.
- Там будут повторяющиеся строки. Чтобы устранить их, вы хотите перенаправить вывод в файл, а затем запустить файл с помощью инструмента, как
uniq
.
Вот командный файл, который используется только for
для идентификации жестких ссылок. Как forfiles
не участвует, это может быть немного быстрее, однако он все еще страдает от оставшихся предостережений вышеупомянутого однострочника.
@echo off
AT > NUL
if %ERRORLEVEL% NEQ 0 echo You need to run this script from an elevated command prompt. Exiting. && exit /B 1
for /R "%CD%" %%a IN (*.*) do (
for /F "usebackq tokens=2* delims=:" %%b in (`fsutil hardlink list "%%a" ^| findstr /n .* ^| findstr /b /v 1`) do (
fsutil hardlink list "%%b"
REM The following echo command breaks up each group of hard links with a blank line
echo.
)
)
Есть несколько других (не проверенных) вариантов:
Используйте (старую) утилиту Microsoft HL Scan
hlscan /dir %CD%
Используйте альтернативную команду поиска, которая входит в состав служебного инструментария Microsoft SFUA:
find . -links +1
Используйте утилиту findlinks Sysinternals аналогично тому, как fsutil
указано выше
Используйте программу Uwe Sieber's ListLinks - смотрите ссылку для использования
Используйте Nirsoft NTFSLinksView, если вы предпочитаете приложение с графическим интерфейсом