Làm cách nào để xem tất cả các liên kết tượng trưng, ​​Điểm nối, Liên kết cứng trong Thư mục bằng thư mục?


21

Lệnh thư mục hiển thị danh sách tất cả các tập tin, thư mục ở một vị trí nhất định. Nhưng nó sẽ hiển thị loại cho Điểm nối cũng như Liên kết tượng trưng đến thư mục. Có lệnh nào sẽ phân biệt và cho tôi biết đây là điểm liên kết nào và liên kết tượng trưng cũng như tệp nào là liên kết cứng?

Câu trả lời:


14

Tại sao không sử dụng jeft.exe từ SysIternals? Nó cho phép bạn liệt kê tất cả các mối nối trong một thư mục cụ thể hoặc các thư mục phụ của nó.

Từ trang web:

Giới thiệu

Windows 2000 trở lên hỗ trợ các liên kết tượng trưng thư mục, trong đó một   thư mục phục vụ như một liên kết tượng trưng đến một thư mục khác trên   máy vi tính. Ví dụ: nếu thư mục D: \ SYMLINK được chỉ định   C: \ WINNT \ HỆ THỐNG32 làm mục tiêu, sau đó một ứng dụng truy cập   D: \ SYMLINK \ DRIVERS trong thực tế sẽ truy cập   C: \ WINNT \ HỆ THỐNG32 \ ĐẠI HỌC. Thư mục liên kết tượng trưng được gọi là NTFS   các mối nối trong Windows. Thật không may, Windows không có công cụ cho   tạo các mối nối mà bạn phải mua Bộ tài nguyên Win2K, mà   đi kèm với chương trình linkd để tạo mối nối. Vì thế, tôi   quyết định viết công cụ tạo đường giao nhau của riêng tôi: Giao lộ. Ngã ba   chỉ cho phép bạn tạo các mối nối NTFS, nó cho phép bạn xem nếu   tập tin hoặc thư mục thực sự là điểm lặp lại. Điểm lặp lại là   cơ chế dựa trên các mối nối NTFS và chúng được sử dụng bởi   Dịch vụ lưu trữ từ xa (RSS) của Windows, cũng như các điểm gắn kết âm lượng.

Vui lòng đọc bài viết Microsoft KB này để biết các mẹo sử dụng các mối nối.

Tuy nhiên, Windows không hỗ trợ các mối nối với các thư mục trên remote   cổ phiếu.

Nếu bạn muốn xem thông tin thô, việc sử dụng cho Junction là   tiếp theo:

Sử dụng ngã ba

Sử dụng đường nối để liệt kê các đường nối:

Cách sử dụng: [-s]

-s Recurse thư mục con

Ví dụ:

Để xác định xem một tệp có phải là một điểm nối không, chỉ định tên tệp:

ngã ba c: \ test

Để liệt kê các nút giao tiếp bên dưới một thư mục, hãy bao gồm khóa chuyển đổi:

ngã ba -s c: \

Để tạo một đường nối c: \ Chương trình-Tệp cho "c: \ Tệp chương trình":

C: & gt; md Chương trình-Tệp

C: & gt; đường giao nhau c: \ Tệp chương trình "c: \ Tệp chương trình"

Để xóa một ngã ba, hãy sử dụng khóa chuyển đổi:

đường giao nhau -d c: \ Chương trình-Tệp


"Ngã ba" có thể xác định các Liên kết tượng trưng và Điểm nối. Cảm ơn. Nó không xác định các liên kết cứng. Lệnh nào sẽ cho tôi một danh sách tất cả các tệp / tên tệp liên kết cứng. Ngoài ra, có cách nào để có được số lượng liên kết của một tập tin? Tôi biết rằng số lượng liên kết của một tập tin tương ứng với bao nhiêu liên kết cứng.
Dhiwakar Ravikumar

Bạn sẽ phải bắn fsutil qua từng tệp để phát hiện các liên kết cứng serverfault.com/questions/319134/
Ganesh R.

38

Bạn không nhất thiết phải tải xuống các chương trình bổ sung để liệt kê các mối nối, liên kết tượng trưng và liên kết cứng, nhưng nếu bạn có các yêu cầu định dạng đầu ra cụ thể, chúng có thể giúp ích.

Liệt kê tất cả các mối nối, symlink và thư mục symlink trong thư mục hiện tại và các thư mục con của nó:

dir /al /s

Hoặc nếu bạn muốn chúng được liệt kê riêng ...

Liệt kê tất cả các mối nối trong thư mục hiện tại và các thư mục con của nó:

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

Liệt kê tất cả các liên kết tượng trưng trong thư mục hiện tại và các thư mục con của nó:

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

Liệt kê tất cả các thư mục symlink trong thư mục hiện tại và các thư mục con của nó:

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

Các l cờ thuộc tính là chìa khóa ở đây; l là cho Reparse Points (nút giao, liên kết tượng trưng và thư mục symlink)

Liên kết cứng

không may dir liệt kê các liên kết cứng như các tệp thông thường, vì vậy bạn không thể sử dụng nó để xác định các liên kết cứng. Bạn sử dụng sẵn có fsutil thay thế. Nó cần phải được chạy từ một dấu nhắc lệnh nâng cao.

Với fsutil, liệt kê tất cả các liên kết cứng trong thư mục hiện tại và các thư mục con của nó:

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.

Điều này không phải là lý tưởng, và tôi sẽ hoan nghênh mọi cải tiến.

  • Sử dụng forfiles với tùy chọn thư mục con recurse ( /s ) đập CPU của tôi và mất một lúc để hoàn thành.
  • Các fsutil về cơ bản kết thúc chạy hai lần; lần đầu tiên xác định các liên kết cứng bằng cách đếm số lượng đường đầu ra được trả về bởi mỗi cuộc gọi và lần thứ hai trên các liên kết cứng vừa tìm thấy để có đầu ra đúng.
  • Sẽ có những dòng trùng lặp. Để loại bỏ chúng, bạn muốn chuyển hướng đầu ra sang một tệp và sau đó chạy tệp thông qua một công cụ như uniq.

Đây là một tệp bó chỉ sử dụng for để xác định các liên kết cứng. Như forfiles không liên quan, nó có thể nhanh hơn một chút, tuy nhiên nó vẫn phải chịu những cảnh báo còn lại của lớp lót trên.

@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.       
  )
)

Có một vài lựa chọn khác (chưa được kiểm tra):

Sử dụng Microsoft (cũ) Quét HL tiện ích

hlscan /dir %CD%

Sử dụng thay thế tìm thấy lệnh đi kèm với bộ công cụ tiện ích SFUA của Microsoft:

find . -links +1

Sử dụng Sysiternals ' tìm liên kết tiện ích theo cách tương tự như fsutil đã đề cập ở trên

Sử dụng Uwe Sieber Danh sách liên kết chương trình - xem liên kết để sử dụng

Sử dụng Nirsoft NTFSLinksView nếu bạn thích một ứng dụng GUI


Trong Windows 7, dir / al / s không hiển thị thư mục symlink OP được gắn thẻ Windows 7, do đó, điều này không trả lời câu hỏi OP.
jaylweb

@jaylweb (1) dir / al / s liệt kê tất cả các điểm lặp lại. Xem thêm câu trả lời của tôi để chỉ liệt kê các thư mục symlink. (2) Bạn sai, điều này không trả lời câu hỏi.
Jimadine

7

Kể từ Powershell 5+, một lớp lót sau đây liệt kê đệ quy tất cả các liên kết cứng tệp, mối nối thư mục và liên kết tượng trưng và các mục tiêu của chúng bắt đầu từ d:\Temp\:

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

Đầu ra:

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}

Nếu bạn quan tâm đến nhiều mục tiêu cho các liên kết cứng, hãy sử dụng biến thể này liệt kê các mục tiêu được phân tách bằng tab:

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

Bạn có thể cần đặc quyền của quản trị viên để chạy tập lệnh này C:\.

Để chạy các tập lệnh này từ dòng lệnh truyền thống (cmd.exe):

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

Ví dụ:

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

1

Liên kết cứng được mô tả tốt hơn như trên, nhưng đối với Liên kết và Liên kết tượng trưng, ​​các hoạt động sau đây hoạt động độc đáo:

Tôi không sử dụng bất kỳ lệnh mới nào ở đây, tuy nhiên, nó sẽ cải thiện một số lệnh được liệt kê bằng cách hiển thị cho bạn một danh sách đẹp của từng liên kết được tìm thấy, trong đường dẫn, đó là loại (SymLink / Junction) và cả đường dẫn Liên kết và đường dẫn đích.

Có một số cái tốt ở trên nhưng chúng chỉ cung cấp cho bạn đường dẫn TARGET và thông thường bạn muốn xóa liên kết chứ không phải mục tiêu hoặc tương quan tất cả các liên kết và mục tiêu.

Để có được Loại, Liên kết và Mục tiêu, bạn có thể sử dụng các mục sau trong 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" ) )

Ví dụ đầu ra:

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

0

LinkMagic2.exe (Ma thuật danh sách ngã ba) cũng tốt.

Tôi đã xóa nhầm tất cả c:\user Các liên kết nối, chẳng hạn như printhood, nethood và dữ liệu ứng dụng khi tôi cài đặt windows 7 lần đầu tiên cách đây 2 năm vì tôi nghĩ rằng chúng bị đặt nhầm ở chỗ cài đặt. Những gì họ thực sự cho là khả năng tương thích ngược, và trong khi tìm kiếm trên internet, tôi thấy một số người đã gặp rắc rối khi cố gắng làm một số việc mà không có các điểm nối này.


0

Quản lý xa 3.0 có thể cả tìm kiếm và hiển thị các liên kết tượng trưng và điểm nối khác nhau từ các tệp và thư mục. (Nó có thể làm rất nhiều thứ khác.) Nó cũng có thể tìm kiếm các liên kết cứng.

ALT + F7 = & gt; [x] Sử dụng bộ lọc = & gt; Lọc e r = & gt; Trong

Chọn các thuộc tính bạn muốn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.