Jak wyświetlić wszystkie dowiązania symboliczne, Punkty połączeń, Dowiązania twarde w folderze za pomocą reż?

30

Polecenie dir / a wyświetla listę wszystkich plików, folderów w danej lokalizacji. Ale wyświetla typ punktów połączenia, a także dowiązania symboliczne do folderów. Czy jest jakieś polecenie, które różnicuje i mówi mi, które z nich są punktami połączenia, a które są dowiązaniami symbolicznymi, a także które pliki są dowiązaniami twardymi?

Dhiwakar Ravikumar
źródło

Odpowiedzi:

18

Dlaczego nie skorzystać z pliku junction.exe z SysInternals? Pozwala wyświetlić listę wszystkich skrzyżowań w określonym folderze lub jego podfolderach.

Ze strony:

Wprowadzenie

Windows 2000 i nowsze wersje obsługują dowiązania symboliczne katalogu, gdzie katalog służy jako dowiązanie symboliczne do innego katalogu na komputerze. Na przykład, jeśli katalog D: \ SYMLINK określił C: \ WINNT \ SYSTEM32 jako cel, wówczas aplikacja uzyskująca dostęp do D: \ SYMLINK \ DRIVERS w rzeczywistości uzyskiwałaby dostęp do C: \ WINNT \ SYSTEM32 \ DRIVERS. Dowiązania symboliczne katalogu są znane jako połączenia NTFS w systemie Windows. Niestety, system Windows nie zawiera narzędzi do tworzenia skrzyżowań - musisz zakupić zestaw zasobów Win2K, który jest dostarczany wraz z połączonym programem do tworzenia skrzyżowań. Dlatego postanowiłem napisać własne narzędzie do tworzenia połączeń: Junction. Junction nie tylko pozwala tworzyć połączenia NTFS, ale pozwala zobaczyć, czy pliki lub katalogi są w rzeczywistości punktami ponownej analizy. Punkty ponownej analizy są mechanizmem, na którym oparte są połączenia NTFS,

Zapoznaj się z tym artykułem Microsoft KB, aby uzyskać wskazówki dotyczące korzystania z skrzyżowań.

Uwaga: Windows nie obsługuje połączeń do katalogów na zdalnych udziałach.

Jeśli chcesz wyświetlić informacje o ponownej analizie, użycie Junction jest następujące:

Korzystanie z połączenia

Użyj skrzyżowania, aby wyświetlić listę skrzyżowań:

Użycie: [-s]

-s Rekurencyjne podkatalogi

Przykłady:

Aby ustalić, czy plik jest złączem, podaj nazwę pliku:

skrzyżowanie c: \ test

Aby wyświetlić listę skrzyżowań pod katalogiem, włącz przełącznik –s:

skrzyżowanie -sc: \

Aby utworzyć skrzyżowanie c: \ Program-Files dla „c: \ Program Files”:

C:> md Program-Files

C:> skrzyżowanie c: \ Program-Files "c: \ Program Files"

Aby usunąć skrzyżowanie, użyj przełącznika –d:

junction -dc: \ Program-Files

Ganesh R.
źródło
1
„skrzyżowanie” może identyfikować dowiązania symboliczne i punkty połączenia. Dzięki. Nie identyfikuje twardych linków. Które polecenie da mi listę wszystkich plików / nazw plików, do których prowadzą twarde łącza. Alternatywnie, czy jest jakiś sposób na uzyskanie liczby linków do pliku? Wiem, że liczba linków pliku odpowiada liczbie twardych linków.
Dhiwakar Ravikumar
2
Będziesz musiał odpalić fsutil nad każdym plikiem, aby wykryć hardlinks serverfault.com/questions/319134/…
Ganesh R.,
49

Nie musisz koniecznie pobierać dodatkowych programów, aby wyświetlić listę skrzyżowań, dowiązań symbolicznych i dowiązań twardych, ale jeśli masz określone wymagania dotyczące formatu wyjściowego, mogą one pomóc.

Lista wszystkich skrzyżowań, dowiązań symbolicznych i katalogów dowiązań symbolicznych w bieżącym katalogu i jego podkatalogach:

dir /al /s

Lub jeśli chcesz, aby były wymienione osobno ...

Wyświetl wszystkie skrzyżowania w bieżącym katalogu i jego podkatalogach:

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

Wyświetl wszystkie dowiązania symboliczne w bieżącym katalogu i jego podkatalogach:

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

Wyświetl wszystkie katalogi dowiązań symbolicznych w bieżącym katalogu i jego podkatalogach:

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

lFlag atrybutem jest tutaj kluczem; ljest dla Reparse Points(skrzyżowań, dowiązań symbolicznych i katalogów dowiązań symbolicznych)

Twarde linki

Niestety dirwyświetla twarde linki jako zwykłe pliki, więc nie można go używać do identyfikowania twardych łączy. Zamiast tego możesz użyć wbudowanego fsutil. Należy go uruchomić z wiersza polecenia z podwyższonym poziomem uprawnień.

Za pomocą wyświetl fsutillistę wszystkich dowiązań twardych w bieżącym katalogu i jego podkatalogach:

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.

Ten jednowarstwowy nie jest idealny i chętnie przyjmę wszelkie ulepszenia.

  • Korzystanie forfilesz opcji podkatalogów rekurencyjnych ( /s) wbiło mój procesor i zajęło mu trochę czasu.
  • W fsutilzasadzie kończy się działa dwa razy; po raz pierwszy zidentyfikuj twarde linki, licząc liczbę linii wyjściowych zwracanych przez każde wywołanie, a po raz drugi na właśnie znalezionych twardych linkach, aby uzyskać prawidłowe wyjście.
  • Będą duplikaty linii. Aby je wyeliminować, należy przekierować dane wyjściowe do pliku, a następnie uruchomić plik za pomocą narzędzia takiego jak uniq.

Oto plik wsadowy, który służy tylko fordo identyfikacji twardych łączy. Ponieważ forfilesnie jest zaangażowany, może być nieco szybszy, jednak nadal cierpi z powodu pozostałych zastrzeżeń powyższej jednowarstwowej.

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

Istnieje kilka innych (nieprzetestowanych) opcji:

Użyj (starego) narzędzia Microsoft HL Scan

hlscan /dir %CD%

Użyj alternatywnego polecenia znajdującego się w zestawie narzędzi Microsoft SFUA:

find . -links +1

Użyj narzędzia findlinks Sysinternals w podobny sposób, jak fsutilwspomniano powyżej

Użyj programu ListLinks firmy Uwe Sieber - patrz link do użycia

Użyj NTFSLinksView Nirsoft, jeśli wolisz aplikację GUI

Jimadine
źródło
W Windows 7 katalog / al / s nie wyświetla katalogu dowiązania symbolicznego OP oznaczony Windows 7, dlatego nie odpowiada na pytanie OP.
jaylweb
@jaylweb (1) dir / al / s wyświetla wszystkie punkty ponownej analizy. Zobacz dalej moją odpowiedź, aby wyświetlić tylko katalogi dowiązań symbolicznych. (2) Mylisz się, to odpowiada na pytanie.
Jimadine
11

Począwszy od programu Powershell 5+, następująca linijka rekurencyjnie zawiera listę wszystkich dowiązań do plików, połączeń katalogów i dowiązań symbolicznych oraz ich celów, zaczynając od d:\Temp\:

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

Wydajność:

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}

Jeśli zależy Ci na wielu celach twardych linków, skorzystaj z tej odmiany, która zawiera listę celów rozdzielonych tabulatorami:

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

Możesz potrzebować uprawnień administratora, aby uruchomić ten skrypt na przykład C:\.

Aby uruchomić te skrypty z tradycyjnego wiersza poleceń (cmd.exe):

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

Na przykład:

C:\>PowerShell.exe -NoProfile -ExecutionPolicy Bypass -Command "dir 'd:\Temp' -recurse -force | ?{ $_.LinkType } | select FullName, LinkType, @{ Name = \"Targets\"; Expression = { $_.Target -join \"`t\" } }"
Anton Krouglov
źródło
Jak to zmienić, aby wyświetlić skrzyżowania? Nie znam się naprawdę na poleceniach PowerShell.
J. Scott Elblein
1
@ J.ScottElbleindir 'd:\Temp' -recurse -force | ?{$_.LinkType -eq "Junction"} | select FullName,LinkType,Target
Anton Krouglov
LinkTypenie wydaje się wiarygodny w przypadku punktów ponownej analizy. Na przykład na moim komputerze z systemem W10 z PS 5.1 LinkTypewartość null jest równa „C: \ ProgramData \ Desktop” i „C: \ Users \ All Users”, podczas gdy dir /aL(Wiersz polecenia, a nie PowerShell) wskazuje, że pierwszy to punkt połączenia a drugi symboliczny link.
NewSites
@NewSites Czy korzystasz z podwyższonego poziomu Poweshell?
Anton Krouglov
Tak, uruchamiając PS ISE jako administrator.
NewSites
3

Twarde linki są lepiej opisane jak wyżej, ale w przypadku dowiązań symbolicznych i połączeń następujące działa dobrze:

Nie używam tutaj żadnych nowych poleceń, jednak poprawia się niektóre z wymienionych na liście, pokazując ładną listę każdego znalezionego łącza, w ścieżce, jego typ (SymLink / Junction) oraz ścieżkę łącza i ścieżkę docelową.

Powyżej znajduje się kilka dobrych, ale podają tylko ścieżkę CELU i zazwyczaj chcesz usunąć link, a nie cel lub skorelować wszystkie linki i cele.

Aby uzyskać typ, link i cel, możesz użyć następujących poleceń w 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" ) )

Przykładowe dane wyjściowe:

SYMLINK: "G:\FTP\Root" → "G:\FTP\Data"
JUNCTION: "G:\FTP\Junctioned\BT\02" → "W:\FTPRoot\02"
Ben Personick
źródło
1

Far Manager 3.0 może zarówno wyszukiwać, jak i wyświetlać dowiązania symboliczne i punkty połączenia w odróżnieniu od plików i katalogów. (Potrafi robić tak wiele innych rzeczy.) Może także wyszukiwać twarde linki.

ALT+ F7=> [x] Użyj filtru => Filtruj er =>Ins

Wybierz odpowiednie atrybuty.

użytkownik3603546
źródło
0

LinkMagic2.exe (magia listy połączeń) jest również dobry.

c:\userPodczas pierwszego instalowania systemu Windows 7 2 lata temu omyłkowo usunąłem wszystkie moje łącza Junction, takie jak printivity, nethood i dane aplikacji, ponieważ myślałem, że zostały one błędnie umieszczone przez instalację. Tak naprawdę są kompatybilnością wsteczną i podczas przeszukiwania Internetu widzę, że niektórzy mieli problemy z robieniem pewnych rzeczy bez tych punktów połączenia.

Jim
źródło