dir을 사용하여 폴더의 모든 심볼릭 링크, 접합점, 하드 링크를 보는 방법은 무엇입니까?


30

dir / a 명령 은 주어진 위치에있는 모든 파일, 폴더 목록을 표시합니다. 그러나 정션 포인트의 유형과 폴더에 대한 심볼릭 링크가 표시됩니다. 분기점과 심볼릭 링크 및 하드 링크 파일 중 어떤 것을 구별하고 알려주는 명령이 있습니까?

답변:


18

왜 사용하지 junction.exe를을 시스 인 터널에서? 특정 폴더 또는 하위 폴더의 모든 정션을 나열 할 수 있습니다.

웹 사이트에서 :

소개

Windows 2000 이상은 디렉토리 심볼릭 링크를 지원합니다. 여기서 디렉토리는 컴퓨터의 다른 디렉토리에 대한 심볼릭 링크 역할을합니다. 예를 들어, D : \ SYMLINK 디렉토리가 C : \ WINNT \ SYSTEM32를 대상으로 지정한 경우 D : \ SYMLINK \ DRIVERS에 액세스하는 응용 프로그램은 실제로 C : \ WINNT \ SYSTEM32 \ DRIVERS에 액세스합니다. 디렉토리 기호 링크는 Windows에서 NTFS 정션으로 알려져 있습니다. 불행히도 Windows에는 정션을 만드는 도구가 없습니다. 정션을 만드는 링크 된 프로그램과 함께 제공되는 Win2K Resource Kit를 구매해야합니다. 따라서 나는 자신 만의 접합 생성 도구 인 Junction을 작성하기로 결정했습니다. 정션은 NTFS 정션을 작성할 수있을뿐만 아니라 파일 또는 디렉토리가 실제로 재분석 지점인지 확인할 수 있습니다. 재분석 지점은 NTFS 접합의 기반이되는 메커니즘입니다.

접점 사용에 대한 팁은이 Microsoft KB 기사를 읽으십시오.

Windows는 원격 공유의 디렉토리에 대한 정션을 지원하지 않습니다.

재분석 정보를 보려면 Junction 사용법은 다음과 같습니다.

정션 사용

접점을 사용하여 접점을 나열하십시오.

사용법 : [-s]

-s 재귀 하위 디렉토리

예 :

파일이 정션인지 판별하려면 파일 이름을 지정하십시오.

정션 c : \ test

디렉토리 아래의 정션을 나열하려면 –s 스위치를 포함하십시오.

정션 -sc : \

"c : \ Program Files"에 대한 c : \ Program-Files 정션을 작성하려면 다음을 수행하십시오.

C :> md 프로그램 파일

C :> 접점 c : \ Program-Files "c : \ Program Files"

정션을 삭제하려면 –d 스위치를 사용하십시오.

정션 -dc : \ Program-Files


1
"접합점"은 기호 링크 및 접속점을 식별 할 수 있습니다. 감사. 하드 링크를 식별하지 않습니다. 어떤 명령을 사용하면 하드 링크 된 모든 파일 / 파일 이름 목록이 표시됩니다. 또는 파일의 링크 수를 얻는 방법이 있습니까? 파일의 링크 수는 하드 링크 수에 해당합니다.
Dhiwakar Ravikumar


49

정션, 심볼릭 링크 및 하드 링크를 나열하기 위해 추가 프로그램을 반드시 다운로드 할 필요는 없지만 특정 출력 형식 요구 사항이있는 경우 도움이 될 수 있습니다.

현재 디렉토리 및 해당 서브 디렉토리의 모든 정션, 심볼릭 링크 및 심볼릭 링크 디렉토리를 나열하십시오.

dir /al /s

또는 별도로 나열하려면 ...

현재 디렉토리 및 해당 서브 디렉토리의 모든 정션을 나열하십시오.

dir /al /s | findstr "<JUNCTION>"

현재 디렉토리 및 해당 서브 디렉토리의 모든 심볼릭 링크를 나열하십시오.

dir /al /s | findstr "<SYMLINK>"

현재 디렉토리 및 해당 서브 디렉토리의 모든 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재귀 하위 디렉토리 옵션 ( /s) 과 함께 사용하면 CPU가 손상되어 완료하는 데 시간이 걸렸습니다.
  • fsutil두 번 실행까지 기본적으로 끝; 각 호출에 의해 리턴되는 출력 라인 수를 세어 하드 링크를 처음 식별하고, 두 번째로 하드 링크를 발견하면 출력을 올바르게 얻습니다.
  • 중복 된 줄이 있습니다. 그것들을 제거하려면 출력을 파일로 리디렉션 한 다음과 같은 도구를 통해 파일을 실행하려고합니다 uniq.

다음은 for하드 링크를 식별 하는 데만 사용하는 배치 파일입니다 . AS는 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 명령을 사용하십시오 .

find . -links +1

위에서 언급 한 것과 비슷한 방식으로 Sysinternals의 findlinks 유틸리티를 사용하십시오.fsutil

Uwe Sieber의 ListLinks 프로그램 사용-사용법에 대한 링크 참조

GUI 응용 프로그램을 선호하는 경우 Nirsoft의 NTFSLinksView를 사용하십시오.


Windows 7에서 dir / al / s에 symlink 디렉토리가 표시되지 않음 OP가 Windows 7에 태그를 지정 했으므로 OP 질문에 대답하지 않습니다.
jaylweb

@jaylweb (1) dir / al / s는 모든 재분석 지점을 나열합니다. symlink 디렉토리 만 나열하려면 내 대답을 자세히 참조하십시오. (2) 당신이 틀 렸습니다. 이것은 질문에 대답합니다.
Jimadine

11

Powershell 5+부터 다음의 한 줄짜리 파일은 모든 파일 하드 링크, 디렉토리 접합 및 심볼릭 링크 및 대상을 다음과 같이 재귀 적으로 나열합니다 d:\Temp\.

dir 'd:\Temp' -recurse -force | ?{$_.LinkType} | select FullName,LinkType,Target

산출:

FullName                                LinkType     Target
--------                                --------     ------
D:\Temp\MyJunctionDir                   Junction     {D:\exp\junction_target_dir}
D:\Temp\MySymLinkDir                    SymbolicLink {D:\exp\symlink_target_dir}
D:\Temp\MyHardLinkFile.txt              HardLink     {D:\temp\MyHardLinkFile2.txt, D:\exp\hlink_target.xml}
D:\Temp\MyHardLinkFile2.txt             HardLink     {D:\temp\MyHardLinkFile.txt, D:\exp\hlink_target.xml}
D:\Temp\MySymLinkFile.txt               SymbolicLink {..\exp\symlink_target.xml}
D:\Temp\MySymLinkDir\MySymLinkFile2.txt SymbolicLink {D:\temp\normal file.txt}

하드 링크에 대한 여러 대상에 관심이있는 경우 탭으로 구분 된 대상을 나열하는이 변형을 사용하십시오.

dir 'd:\Temp' -recurse -force | ?{$_.LinkType} | select FullName,LinkType,@{ Name="Targets"; Expression={$_.Target -join "`t"} }

say에서이 스크립트를 실행하려면 관리자 권한이 필요할 수 있습니다 C:\.

기존 명령 줄 (cmd.exe)에서 이러한 스크립트를 실행하려면

PowerShell.exe -NoProfile -ExecutionPolicy Bypass -Command "<PowerShell commands>"

예를 들어 :

C:\>PowerShell.exe -NoProfile -ExecutionPolicy Bypass -Command "dir 'd:\Temp' -recurse -force | ?{ $_.LinkType } | select FullName, LinkType, @{ Name = \"Targets\"; Expression = { $_.Target -join \"`t\" } }"

접합점 만 표시하도록 이것을 어떻게 변경합니까? PowerShell 명령에 익숙하지 않습니다.
J. Scott Elblein

1
@ J.ScottElbleindir 'd:\Temp' -recurse -force | ?{$_.LinkType -eq "Junction"} | select FullName,LinkType,Target
Anton Krouglov

LinkType재분석 지점에 신뢰할 수없는 것으로 보입니다. 예를 들어 PS 5.1과 함께 W10을 실행하는 컴퓨터에서 LinkType"C : \ ProgramData \ Desktop"및 "C : \ Users \ All Users"모두에 대해 null 인 반면 dir /aL(PowerShell이 ​​아닌 명령 프롬프트)는 첫 번째 연결 지점임을 나타냅니다. 두 번째는 심볼릭 링크입니다.
NewSites

@NewSites poweshell을 실행하고 있습니까?
Anton Krouglov

예, PS ISE를 관리자 권한으로 실행합니다.
NewSites

3

하드 링크는 위와 같이 더 잘 설명되지만 Symbolic Links and Junctions의 경우 다음과 같이 잘 작동합니다.

여기서는 새로운 명령을 사용하지 않지만 경로에서 발견 된 각 링크의 멋진 목록을 표시하여 유형 (SymLink / Junction)과 링크 경로 및 대상 경로를 모두 표시하여 일부 명령을 개선합니다.

위의 좋은 것들이 있지만 대상 경로 만 제공하며 일반적으로 대상이 아닌 링크를 삭제하거나 모든 링크와 대상을 상관시킵니다.

유형, 링크 및 대상을 얻으려면 CMD에서 다음을 사용할 수 있습니다.

FOR /F "Tokens=*" %A IN ('DIR /al /b /s G:\') DO @( for /F "Tokens=2,4 delims=<[]>" %B IN ('DIR /al "%~A"? ^| FIND /I " %~nA " ^| FIND /I "<" ^| FIND /I ">" ') DO @( ECHO.%~B: "%~A" → "%~C" ) )

출력 예 :

SYMLINK: "G:\FTP\Root" → "G:\FTP\Data"
JUNCTION: "G:\FTP\Junctioned\BT\02" → "W:\FTPRoot\02"

1

Far Manager 3.0은 파일 및 디렉토리와 다른 심볼릭 링크 및 연결 지점을 검색하고 표시 할 수 있습니다. (다른 많은 것들도 할 수 있습니다.) 또한 하드 링크를 검색 할 수도 있습니다.

ALT+ F7=> [x] 필터 사용 => Filt er =>Ins

원하는 속성을 선택하십시오.


0

LinkMagic2.exe (Junction list magic)도 좋습니다.

c:\user설치에 의해 잘못 삽입되었다고 생각했기 때문에 7 년 2 년 전에 Windows를 처음 설치할 때 인쇄, 그물, 응용 프로그램 데이터와 같은 모든 Junction 링크를 실수로 삭제했습니다 . 그들이 실제로하는 것은 이전 버전과의 호환성이며 인터넷을 검색하는 동안 일부는 이러한 연결 지점이없는 특정 작업을 수행하는 데 어려움을 겪고 있음을 알았습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.