सभी सिम्बोलिक लिंक, जंक्शन पॉइंट, हार्ड लिंक को dir का उपयोग करके फ़ोल्डर में कैसे देखें?


30

आदेश dir / एक प्रदर्शित करता है सब फ़ाइलों की एक सूची, किसी दिए गए स्थान में फ़ोल्डर। लेकिन यह जंक्शन पॉइंट्स के साथ-साथ सिम्बॉलिक लिंक्स टू फोल्डर्स के प्रकार को प्रदर्शित करता है। क्या कोई ऐसी कमांड है जो मुझे बताएगी कि इनमें से कौन सी जंक्शन पॉइंट्स हैं और कौन सी सिम्बोलिक लिंक हैं और कौन सी फाइल हार्ड लिंक हैं?

जवाबों:


18

SysInternals से junction.exe का उपयोग क्यों नहीं किया जाता है ? यह आपको किसी विशेष फ़ोल्डर या उसके उप फ़ोल्डरों में सभी जंक्शनों को सूचीबद्ध करने की अनुमति देता है।

वेबसाइट से:

परिचय

विंडोज 2000 और उच्चतर निर्देशिका प्रतीकात्मक लिंक का समर्थन करता है, जहां एक निर्देशिका कंप्यूटर पर किसी अन्य निर्देशिका के प्रतीकात्मक लिंक के रूप में कार्य करती है। उदाहरण के लिए, यदि निर्देशिका D: \ SYMLINK ने C: \ WINNT \ SYSTEM32 को अपने लक्ष्य के रूप में निर्दिष्ट किया है, तो D: \ SYMLINK \ DRIVERS तक पहुंचने वाला एप्लिकेशन वास्तव में C: \ WINNT \ SYSTEM32 / DRIVERS तक पहुंच जाएगा। निर्देशिका प्रतीकात्मक लिंक को विंडोज़ में NTFS जंक्शन के रूप में जाना जाता है। दुर्भाग्य से, विंडोज जंक्शन बनाने के लिए कोई टूल नहीं है - आपको Win2K रिसोर्स किट खरीदना होगा, जो जंक्शन बनाने के लिए लिंकड प्रोग्राम के साथ आता है। इसलिए मैंने अपना जंक्शन बनाने का उपकरण लिखने का फैसला किया: जंक्शन। जंक्शन न केवल आपको एनटीएफएस जंक्शन बनाने की अनुमति देता है, यह आपको यह देखने की अनुमति देता है कि क्या फाइलें या निर्देशिकाएं वास्तव में अंक हैं। एनएआरएफएस जंक्शन जिस पर आधारित होते हैं, उस पर फिर से अंक लगाए जाते हैं,

जंक्शनों के उपयोग के सुझावों के लिए कृपया इस Microsoft KB आलेख को पढ़ें।

नोटेट विंडोज दूरस्थ शेयरों पर निर्देशिकाओं के लिए जंक्शनों का समर्थन नहीं करता है।

यदि आप पुनर्खरीद की जानकारी देखना चाहते हैं, तो जंक्शन का उपयोग निम्नलिखित है:

जंक्शन का उपयोग करना

जंक्शनों को सूचीबद्ध करने के लिए जंक्शन का उपयोग करें:

उपयोग: [-s]

-s Recurse उपनिर्देशिका

उदाहरण:

यह निर्धारित करने के लिए कि क्या कोई फ़ाइल जंक्शन है, फ़ाइल नाम निर्दिष्ट करें:

जंक्शन c: \ test

निर्देशिका के नीचे जंक्शनों को सूचीबद्ध करने के लिए –s स्विच शामिल करें:

जंक्शन -sc: \

"C: \ Program Files" के लिए एक जंक्शन c: \ Program-Files बनाएँ:

C:> md प्रोग्राम-फाइल्स

C:> जंक्शन c: \ Program-Files "c: \ Program Files"

जंक्शन को हटाने के लिए –d स्विच का उपयोग करें:

जंक्शन -dc: \ Program-Files


1
"जंक्शन" प्रतीकात्मक लिंक और जंक्शन बिंदुओं की पहचान कर सकता है। धन्यवाद। यह हार्ड लिंक की पहचान नहीं करता है। क्या कमांड मुझे उन सभी फाइलों / फ़ाइलनामों की सूची देगा जो हार्ड लिंक देते हैं। वैकल्पिक रूप से किसी फ़ाइल की लिंक गणना प्राप्त करने का कोई तरीका है? मुझे पता है कि एक फ़ाइल की लिंक गणना कितने हार्ड लिंक से मेल खाती है।
धीवाकर रविकुमार

2
हार्डलिंक्स सर्वरफॉल्ट. com

49

जरूरी नहीं कि जंक्शनों, सिम्बल और हार्ड लिंक को सूचीबद्ध करने के लिए आपको अतिरिक्त प्रोग्राम डाउनलोड करने की आवश्यकता हो, लेकिन यदि आपके पास विशिष्ट आउटपुट स्वरूप की आवश्यकताएं हैं, तो वे मदद कर सकते हैं।

वर्तमान निर्देशिका और इसके उपनिर्देशिकाओं में सभी जंक्शनों, सहानुभूति और सिम्लिंक निर्देशिकाओं को सूचीबद्ध करें:

dir /al /s

या यदि आप उन्हें अलग से सूचीबद्ध करना चाहते हैं ...

वर्तमान निर्देशिका और उसके उपनिर्देशिकाओं में सभी जंक्शनों की सूची बनाएँ:

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

वर्तमान निर्देशिका और उसके उपनिर्देशिकाओं में सभी सिम्बलिंक को सूचीबद्ध करें:

dir /al /s | findstr "<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.

यह एक-लाइनर आदर्श नहीं है, और मैं किसी भी सुधार का स्वागत करूंगा।

  • का उपयोग करते हुए forfilesrecurse उपनिर्देशिका विकल्प के साथ ( /s) मेरी सीपीयू ठोक, और पूरा करने के लिए कुछ समय लिया।
  • fsutilमूल रूप से दो बार चल रहा है ऊपर समाप्त होता है; पहली बार प्रत्येक कॉल के द्वारा लौटाए गए आउटपुट लाइनों की संख्या की गणना करके हार्ड लिंक की पहचान करने के लिए, और दूसरी बार आउटपुट को सही करने के लिए हार्ड-लिंक पर पाया गया।
  • डुप्लीकेट लाइनें होंगी। उन्हें समाप्त करने के लिए आप किसी फ़ाइल में आउटपुट को पुनर्निर्देशित करना चाहेंगे और फिर फ़ाइल को उपकरण जैसे माध्यम से चला सकते हैं uniq

यहाँ एक बैच फ़ाइल है जो forहार्ड लिंक को पहचानने के लिए उपयोग करता है। जैसा कि 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 स्कैन उपयोगिता का उपयोग करें

hlscan /dir %CD%

Microsoft के SFUA उपयोगिता टूलकिट के साथ आने वाले वैकल्पिक खोज आदेश का उपयोग करें :

find . -links +1

ऊपर बताए गए तरीके से Sysinternals की findlinks उपयोगिता का उपयोग करेंfsutil

Uwe Sieber's ListLinks प्रोग्राम का उपयोग करें - उपयोग के लिए लिंक देखें

उपयोग Nirsoft के NTFSLinksView यदि आप एक जीयूआई आवेदन पसंद करते हैं


विंडोज 7 में, dir / al / s एक सिम्लिंक निर्देशिका नहीं दिखाता है। OP ने विंडोज 7 को टैग किया है, इसलिए यह OPP प्रश्न का उत्तर नहीं देता है।
jaylweb

@jaylweb (1) dir / al / s सभी reparse बिंदुओं को सूचीबद्ध करता है। केवल सहानुभूति निर्देशिकाओं को सूचीबद्ध करने के लिए मेरे उत्तर को और नीचे देखें। (२) तुम गलत हो, यह सवाल का जवाब देता है।
जिमाडीन

11

पॉवर्सशेल 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"} }

इस स्क्रिप्ट को कहने पर चलाने के लिए आपको व्यवस्थापक विशेषाधिकारों की आवश्यकता हो सकती है 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 कमांड से वास्तविक परिचित नहीं हूं।
जे स्कॉट एल्बलिन

1
@ J.ScottElbleindir 'd:\Temp' -recurse -force | ?{$_.LinkType -eq "Junction"} | select FullName,LinkType,Target
एंटोन क्राउग्लोव

LinkTypeप्रकट बिंदुओं के लिए विश्वसनीय प्रतीत नहीं होता है। उदाहरण के लिए, PS 5.1 के साथ W10 चलाने वाले मेरे कंप्यूटर पर, LinkType"C: \ ProgramData \ Desktop" और "C: \ Users \ All उपयोगकर्ता" दोनों के लिए अशक्त है, जबकि dir /aL(कमांड प्रॉम्प्ट, पॉवरशेल नहीं) इंगित करता है कि पहला एक निर्णायक बिंदु है और दूसरा एक प्रतीकात्मक लिंक।
न्यूसाइट्स

@ क्या आप पावसले को ऊंचा उठा रहे हैं?
एंटोन क्राउग्लोव

हां, PS ISE को व्यवस्थापक के रूप में चला रहा है।
न्यूसाइट्स

3

उपरोक्त लिंक के रूप में हार्ड लिंक बेहतर हैं, लेकिन प्रतीकात्मक लिंक और जंक्शनों के लिए निम्न काम करता है:

मैं यहाँ किसी भी नए कमांड का उपयोग नहीं कर रहा हूँ, हालाँकि यह आपको पथ में, प्रत्येक लिंक की एक अच्छी सूची दिखा कर सूचीबद्ध करता है, यह टाइप (SymLink / Junction) है और लिंक पथ और लक्ष्य पथ दोनों।

ऊपर कुछ अच्छे हैं, लेकिन वे आपको केवल TARGET पथ देते हैं, और आमतौर पर आप लिंक को हटाना चाहते हैं, और लक्ष्य को नहीं, या सभी लिंक और लक्ष्यों को सहसंबंधित नहीं करते हैं।

प्रकार, लिंक और लक्ष्य प्राप्त करने के लिए, आप 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

सुदूर प्रबंधक 3.0 दोनों फ़ाइलों और निर्देशिकाओं से अलग के रूप में सहानुभूति और जंक्शन बिंदुओं को खोज और प्रदर्शित कर सकता है। (यह कई अन्य चीजें कर सकता है।) यह हार्ड लिंक की खोज भी कर सकता है।

ALT+ F7=> [x] फ़िल्टर का उपयोग करें => फ़िल्टर er =>Ins

अपनी इच्छानुसार विशेषताएँ चुनें।


0

LinkMagic2.exe (जंक्शन सूची जादू) भी अच्छा है।

मैंने गलती से अपने सभी c:\userजंक्शन लिंक, जैसे कि प्रिंटहुड, नेथूड, और एप्लिकेशन डेटा को हटा दिया था जब मैंने पहली बार 7 2 साल पहले विंडोज़ स्थापित किया था क्योंकि मुझे लगा कि उन्हें गलती से इंस्टॉल द्वारा डाल दिया गया था। वे वास्तव में बैकवर्ड संगतता के लिए क्या कर रहे हैं, और इंटरनेट पर खोज करते समय मुझे लगता है कि कुछ लोग इन जंक्शन बिंदुओं के बिना कुछ चीजें करने की कोशिश में परेशानी में पड़ गए हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.