Вам не обязательно загружать дополнительные программы, чтобы перечислять соединения, символические и жесткие ссылки, но если у вас есть определенные требования к формату вывода, они могут помочь.
Перечислите все каталоги соединений, символических ссылок и символических ссылок в текущем каталоге и его подкаталогах:
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, если вы предпочитаете приложение с графическим интерфейсом