Wie zeige ich alle symbolischen Links, Knotenpunkte, Hardlinks in einem Ordner mit Verzeichnis an?

49517
Dhiwakar Ravikumar

Der Befehl dir / a zeigt eine Liste aller Dateien und Ordner an einem bestimmten Ort an. Es zeigt jedoch den Typ für Knotenpunkte sowie symbolische Links zu Ordnern an. Gibt es einen Befehl, der differenziert und mir sagt, welche davon Verbindungspunkte sind und welche symbolischen Links und welche der Dateien Hardlinks sind?

19

6 Antworten auf die Frage

36
Jimadine

You don't necessarily need to download additional programs to list junctions, symlinks and hard links, but if you have specific output format requirements, they may help.

List all junctions, symlinks and symlink directories in the current directory and its subdirectories:

dir /al /s 

Or if you want them listed separately...

List all junctions in the current directory and its subdirectories:

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

List all symlinks in the current directory and its subdirectories:

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

List all symlink directories in the current directory and its subdirectories:

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

The l attribute flag is key here; l is for Reparse Points (junctions, symlinks and symlink directories)

Hard links

Unfortunately dir lists hard links as normal files, so you cannot use it to identify hard links. You an use the inbuilt fsutil instead. It needs to be run from an elevated command prompt.

With fsutil, list all hard links in the current directory and its subdirectories:

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. 

This one-liner is not ideal, and I would welcome any improvements.

  • Using forfiles with the recurse subdirectories option (/s) hammered my CPU, and took a while to complete.
  • The fsutil basically ends up running twice; the first time to identify the hard links by counting the number of output lines returned by each call, and the second time on just-found hard links to get the output right.
  • There will be duplicate lines. To eliminate them you'd want to redirect the output to a file and then run the file through a tool like uniq.

Here's a batch file that uses just for to identify hard links. As forfiles is not involved, it may be slightly faster, however it still suffers the remaining caveats of the above one-liner.

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

There are a few other (untested) options:

Use the (old) Microsoft HL Scan utility

hlscan /dir %CD% 

Use the alternative find command that comes with the Microsoft's SFUA utility toolkit:

find . -links +1 

Use the Sysinternals' findlinks utility in a similar way to fsutil mentioned above

Use Uwe Sieber's ListLinks program - see link for usage

Use Nirsoft's NTFSLinksView if you prefer a GUI application

In Windows 7 zeigt dir / al / s kein Symlink-Verzeichnis. Das OP wurde mit Windows 7 gekennzeichnet. Daher wird die OP-Frage nicht beantwortet. jaylweb vor 7 Jahren 0
@jaylweb (1) dir / al / s listet alle Analysepunkte auf. Weitere Informationen finden Sie weiter unten in meiner Antwort. (2) Du liegst falsch, das beantwortet die Frage nicht. Jimadine vor 6 Jahren 0
14
Ganesh R.

Warum nicht Junction.exe von SysInternals verwenden? Sie können alle Verbindungen in einem bestimmten Ordner oder dessen Unterordnern auflisten.

Von der Website:

Einführung

Windows 2000 und höher unterstützt symbolische Verzeichnisverknüpfungen, wobei ein Verzeichnis als symbolische Verbindung zu einem anderen Verzeichnis auf dem Computer dient. Wenn das Verzeichnis D: \ SYMLINK beispielsweise C: \ WINNT \ SYSTEM32 als Ziel angibt, würde eine Anwendung, die auf D: \ SYMLINK \ DRIVERS zugreift, in Wirklichkeit auf C: \ WINNT \ SYSTEM32 \ DRIVERS zugreifen. Symbolische Links für Verzeichnisse werden in Windows als NTFS-Junctions bezeichnet. Leider enthält Windows keine Tools zum Erstellen von Junctions. Sie müssen das Win2K Resource Kit erwerben, das mit dem Programm linkd zum Erstellen von Junctions geliefert wird. Ich entschied mich daher, mein eigenes Werkzeug zum Erstellen von Knoten zu schreiben: Junction. Mit Junction können Sie nicht nur NTFS-Junctions erstellen, sondern auch, ob Dateien oder Verzeichnisse tatsächlich Reparse-Punkte sind. Reparse-Punkte sind der Mechanismus, auf dem NTFS-Junctions basieren.

In diesem Microsoft-KB-Artikel finden Sie Tipps zur Verwendung von Junctions.

Beachten Sie, dass Windows keine Verknüpfungen zu Verzeichnissen auf Remote-Freigaben unterstützt.

Wenn Sie Reparaturinformationen anzeigen möchten, wird für Junction Folgendes verwendet:

Junction verwenden

Verwenden Sie Junction, um Junctions aufzulisten:

Verwendung: [-s]

-s Recurse-Unterverzeichnisse

Beispiele:

Um festzustellen, ob es sich bei einer Datei um eine Junction handelt, geben Sie den Dateinamen an:

Verbindungsstelle c: \ test

Um Junctions unter einem Verzeichnis aufzulisten, schließen Sie die Option –s ein:

Kreuzung -sc: \

So erstellen Sie eine Kreuzung c: \ Programme für "c: \ Programme":

C:> md Programmdateien

C:> Kreuzung c: \ Programme "c: \ Programme"

Um eine Junction zu löschen, verwenden Sie den Schalter –d:

Junction -dc: \ Programme

"Junction" kann symbolische Links und Junction Points identifizieren. Vielen Dank. Hardlinks werden nicht erkannt. Welcher Befehl gibt mir eine Liste aller Dateien / Dateinamen, die fest verlinkt sind. Oder gibt es eine Möglichkeit, die Anzahl der Links einer Datei abzurufen? Ich weiß, dass die Linkanzahl einer Datei der Anzahl der harten Links entspricht. Dhiwakar Ravikumar vor 9 Jahren 0
Sie müssen fsutil über jede Datei feuern, um Hardlinks zu erkennen http://serverfault.com/questions/319134/how-do-i-view-a-files-hard-links-in-windows Ganesh R. vor 9 Jahren 0
6
Anton Krouglov

Ab Powershell 5+ führt der folgende Einzeiler rekursiv alle Datei-Hardlinks, Verzeichnisverknüpfungen und symbolischen Links und deren Ziele auf, beginnend mit d:\Temp\:

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

Ausgabe:

FullName LinkType Target -------- -------- ------ D:\Temp\MyJunctionDir Junction  D:\Temp\MySymLinkDir SymbolicLink  D:\Temp\MyHardLinkFile.txt HardLink  D:\Temp\MyHardLinkFile2.txt HardLink  D:\Temp\MySymLinkFile.txt SymbolicLink {..\exp\symlink_target.xml} D:\Temp\MySymLinkDir\MySymLinkFile2.txt SymbolicLink  

Wenn Sie sich für mehrere Ziele für Hardlinks interessieren, verwenden Sie diese Variante, die Ziele tabulatorgetrennt aufführt:

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

Möglicherweise benötigen Sie Administratorrechte, um dieses Skript beispielsweise ausführen zu können C:\.

So führen Sie diese Skripts über die herkömmliche Befehlszeile (cmd.exe) aus:

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

Zum Beispiel:

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

Hardlinks werden besser wie oben beschrieben beschrieben, aber für symbolische Links und Junctions funktioniert Folgendes gut:

Ich verwende hier keine neuen Befehle, jedoch werden einige der aufgeführten Befehle verbessert, indem eine Liste aller gefundenen Links angezeigt wird. Der Pfad enthält den Typ (SymLink / Junction) und sowohl den Link-Pfad als auch den Zielpfad.

Es gibt einige gute oben, aber sie geben Ihnen nur den TARGET-Pfad. Normalerweise möchten Sie den Link und nicht das Ziel löschen oder alle Links und Ziele korrelieren.

Um Type, Link und Target abzurufen, können Sie Folgendes in CMD verwenden:

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" ) ) 

Beispielausgabe:

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

LinkMagic2.exe (Junction List Magic) ist auch gut.

Ich habe versehentlich alle meine c:\userJunction-Links gelöscht, wie z. B. Druckerbedingungen, Datenbestand und Anwendungsdaten, als ich Windows 7 vor zwei Jahren zum ersten Mal installierte, weil ich dachte, dass sie von der Installation versehentlich dort abgelegt wurden. Was sie wirklich wollen, ist Abwärtskompatibilität, und während ich das Internet durchsuche, sehe ich, dass einige in Schwierigkeiten geraten sind, bestimmte Dinge ohne diese Verbindungspunkte zu tun.

0
user3603546

Far Manager 3.0 kann Symlinks und Knotenpunkte suchen und anzeigen, da sie sich von Dateien und Verzeichnissen unterscheiden. (Es kann so viele andere Dinge tun.) Es kann auch nach harten Links suchen.

ALT+ F7=> [x] Verwenden Sie filter => Filt er =>Ins

Wählen Sie die gewünschten Attribute aus.