Tüm Sembolik bağları, Bağlantı noktalarını, Klasördeki Sabit bağlantıları dir kullanarak nasıl görüntüleyebilirim?


30

Dir / a komutu , belirli bir konumdaki tüm dosya ve klasörlerin listesini görüntüler. Ancak, Bağlantı Noktaları türünü ve ayrıca Klasörlere Sembolik Bağlantılar türünü görüntüler. Bunlardan hangilerinin birleşim noktaları olduğunu ve hangilerinin sembolik bağlar olduğu kadar dosyaların hangilerinin hard linkler olduğunu söyleyebilecek herhangi bir komut var mı?

Yanıtlar:


18

Neden junction.exe aracını SysInternals'tan kullanmıyorsunuz ? Belirli bir klasördeki veya alt klasörlerindeki tüm bağlantıları listelemenizi sağlar.

Web sitesinden:

Giriş

Windows 2000 ve üstü, bir dizinin bilgisayardaki başka bir dizine sembolik bir bağlantı görevi gördüğü dizin sembolik bağlarını destekler. Örneğin, D: \ SYMLINK dizini hedef olarak C: \ WINNT \ SYSTEM32 olarak tanımladıysa, D: \ SYMLINK \ DRIVERS'a erişen bir uygulama gerçekte C: \ WINNT \ SYSTEM32 \ DRIVERS'a erişiyor olacaktır. Dizin sembolik bağları, Windows'ta NTFS bağlantıları olarak bilinir. Maalesef, Windows kavşak oluşturmak için hiçbir araç içermiyor - kavşaklar oluşturmak için linkd programı ile birlikte gelen Win2K Kaynak Kitini satın almalısınız. Bu yüzden kendi bağlantı oluşturma aracımı yazmaya karar verdim: Junction. Kavşak, yalnızca NTFS kavşağı oluşturmanıza izin vermez, aynı zamanda dosya veya dizinlerin gerçekte reparse noktaları olup olmadığını görmenizi sağlar. Reparse noktaları, NTFS bağlantılarının dayandığı mekanizmadır.

Kavşak kullanımıyla ilgili ipuçları için lütfen bu Microsoft KB makalesini okuyun.

Windows'un uzak paylaşımlardaki dizinlere bağlantı desteklemediğini unutmayın.

Yeniden satın alma bilgilerini görüntülemek istiyorsanız, Kavşak için kullanım aşağıdaki gibidir:

Kavşağı Kullanma

Kavşakları listelemek için kavşağı kullanın:

Kullanım: [-s]

-s Yinelenen alt dizinleri

Örnekler:

Bir dosyanın bir bağlantı olup olmadığını belirlemek için, dosya adını belirtin:

kavşak c: \ test

Dizinin altındaki bağlantıları listelemek için –s anahtarını kullanın:

kavşak -sc: \

"C: \ Program Files" için c: \ Program-Files adlı bir kavşak oluşturmak için:

C:> md Program Dosyaları

C:> kavşak c: \ Program-Files "c: \ Program Files"

Bir kavşağı silmek için –d düğmesini kullanın:

kavşağı -dc: \ Program-Files


1
"kavşak", Sembolik Bağlantıları ve Kavşak Noktalarını tanımlayabilir. Teşekkürler. Sabit bağlantıları tanımlamaz. Hangi komut bana sabit bağlanan tüm dosyaların / dosya adlarının bir listesini verecektir. Alternatif olarak, bir dosyanın link sayısını elde etmenin bir yolu var mı? Bir dosyanın link sayısının sahip olduğu hard linke karşılık geldiğini biliyorum.
Dhiwakar Ravikumar

2
Hardlinks'i tespit etmek için her dosyanın üzerine fsutil ateşlemeniz gerekir serverfault.com/questions/319134/…
Ganesh R.

49

Kavşakları, sembolik bağlantıları ve sabit bağlantıları listelemek için ek programlar indirmeniz gerekmez, ancak belirli çıktı biçimi gereksinimleriniz varsa, yardımcı olabilirler.

Geçerli dizindeki ve alt dizinlerindeki tüm kavşak, işaret ve işaret bağlantı dizinlerini listele:

dir /al /s

Ya da ayrı ayrı listelenmesini istiyorsanız ...

Geçerli dizindeki ve alt dizinlerindeki tüm bağlantıları listele:

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

Geçerli dizindeki ve alt dizinlerindeki tüm sembolik bağlantıları listele:

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

Geçerli dizindeki ve alt dizinlerindeki tüm işaret dizinlerini listele:

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

lNitelik bayrağı burada anahtarıdır; liçindir Reparse Points(kavşaklar, sembolik bağlantılar ve sembolik link dizinleri)

Sert bağlantılar

Ne yazık ki dir, sabit bağlantıları normal dosyalar olarak listeler, bu nedenle sabit bağlantıları tanımlamak için kullanamazsınız. Yerine bir kullanım fsutilyerine. Yükseltilmiş bir komut isteminden çalıştırılması gerekiyor.

İle fsutil, geçerli dizindeki ve alt dizinlerindeki tüm sabit bağlantıları listele:

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.

Bu bir astar ideal değildir ve her türlü gelişmeyi memnuniyetle karşılarım.

  • forfilesYinelenen alt dizinler seçeneğiyle ( /s) kullanmak CPU'mu dövdü ve tamamlanması biraz zaman aldı.
  • Temel fsutilolarak iki kez biter; her çağrının döndürdüğü çıkış satırlarının sayısını sayarak sabit bağlantıları ilk kez ve çıkışı doğru bir şekilde elde etmek için ikinci kez az önce bulunan sabit bağlantıları kullanın.
  • Yinelenen satırlar olacak. Bunları ortadan kaldırmak için çıktıyı bir dosyaya yönlendirmek ve dosyayı benzeri bir araçla çalıştırmak istersiniz uniq.

İşte sadece forsabit bağlantıları tanımlamak için kullanan bir toplu iş dosyası . As forfilesancak yine de yukarıdaki tek satırlık yer kalan uyarıları uğrar, bu biraz daha hızlı olabilir, dahil edilmez.

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

Birkaç başka (denenmemiş) seçenek var:

(Eski) Microsoft HL Scan yardımcı programını kullanın

hlscan /dir %CD%

Microsoft'un SFUA yardımcı programı araç setiyle birlikte verilen alternatif bulma komutunu kullanın :

find . -links +1

Sysinternals ' findlinks yardımcı programını fsutilyukarıda belirtilenlere benzer şekilde kullanın

Uwe Sieber'ın ListLinks programını kullanın - kullanım için bağlantıya bakın

Bir GUI uygulaması tercih ediyorsanız , Nirsoft'un NTFSLinksView uygulamasını kullanın.


Windows 7'de, dir / al / s bir sembolik dizin göstermiyor. OP, Windows 7 etiketli, bu yüzden bu OP sorusunu cevaplamıyor.
jaylweb

@ jaylweb (1) dir / al / s tüm reparse noktalarını listeler. Sadece link link dizinlerini listelemek için cevabımı aşağıya bakınız. (2) Yanılıyorsun, bu soruya cevap veriyor.
Jimadine

11

Powershell 5+ sürümünden itibaren aşağıdaki tek astar, tüm dosya bağlantılarını, dizin bağlantılarını ve sembolik bağları ve bundan başlayarak hedeflerini tekrar tekrar listeler d:\Temp\:

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

Çıktı:

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}

Hardlinks için birden fazla hedef önemsiyorsanız, sekme ile ayrılmış hedefleri listeleyen bu varyasyonu kullanın:

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

Bu betiği söylemek için çalıştırmak için yönetici ayrıcalıklarına ihtiyacınız olabilir C:\.

Bu komut dosyalarını geleneksel komut satırından (cmd.exe) çalıştırmak için:

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

Örneğin:

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

Sadece Kavşakları göstermek için bunu nasıl değiştirirsiniz? PowerShell komutlarına pek aşina değilim.
J. Scott Elblein

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

LinkTypereparse noktaları için güvenilir görünmüyor. Örneğin, PS 5.1 ile W10 çalıştıran bilgisayarımda LinkTypehem "C: \ ProgramData \ Desktop" hem de "C: \ Users \ All Users" için boş dir /aL, ilkinde bir bağlantı noktası olduğunu belirtir (PowerShell değil) ve ikincisi sembolik bir bağ.
NewSites

@NewSites poweshell yükseltilmiş mi çalışıyorsun?
Anton Krouglov

Evet, PS ISE'yi yönetici olarak çalıştırıyorum.
NewSites

3

Sabit bağlantılar yukarıda daha iyi tanımlanmıştır, ancak Sembolik Bağlantılar ve Kavşaklar için aşağıdakiler güzel çalışır:

Burada yeni komutlar kullanmıyorum, ancak yoldaki her bir bağlantının güzel bir listesini göstererek listelenen bazı bölümleri geliştiriyor, yolunda, türü (SymLink / Junction) ve hem Link yolu hem de hedef yolu.

Yukarıda bazı iyi olanlar var ama onlar sadece HEDEF yolunu veriyorlar ve genellikle hedefi silmek ya da tüm bağlantıları ve hedefleri ilişkilendirmek için bağlantıyı silmek istiyorsun.

Tür, Bağlantı ve Hedefi almak için aşağıdakileri CMD'de kullanabilirsiniz:

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

Örnek çıktı:

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

1

Far Manager 3.0, dosya ve dizinlerden farklı olarak sembolik bağlantıları ve bağlantı noktalarını arayabilir ve görüntüleyebilir. (Başka pek çok şey yapabilir.) Aynı zamanda zor bağlantıları da arayabilir.

ALT+ F7=> [x] Filtre kullan => Filt er =>Ins

İstediğiniz özellikleri seçin.


0

LinkMagic2.exe (Kavşak listesi büyüsü) da iyidir.

c:\user2 7 yıl önce ilk kez pencereleri kurduğumda, yazdırma, netlik ve uygulama verileri gibi tüm Kavşak bağlantılarımı yanlışlıkla sildim , çünkü kurulum sırasında yanlışlıkla yerleştirildiklerini sanıyordum. Gerçekte aradıkları şey geriye dönük uyumluluk ve internette arama yaparken bazılarının bu kavşak noktaları olmadan bazı şeyleri yapmakta güçlük çektiğini görüyorum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.