पॉवरशेल `grep -r -l` (-files-with-match) के बराबर


44

पॉवर्सशेल में, मैं सभी फ़ाइलों को एक निर्देशिका (पुनरावर्ती) में कैसे सूचीबद्ध करता हूं, जिसमें एक पाठ है जो किसी दिए गए rexx से मेल खाता है? विचाराधीन फाइलों में वास्तव में अतुलनीय पाठ की लंबी लाइनें होती हैं, इसलिए मैं मिलान रेखा - केवल फ़ाइल नाम नहीं देखना चाहता।

जवाबों:


56

आप Select-Stringफ़ाइलों के अंदर पाठ की खोज के लिए, और Select-Objectप्रत्येक मैच के लिए विशिष्ट गुणों को वापस करने के लिए उपयोग कर सकते हैं । कुछ इस तरह:

Get-ChildItem -Recurse *.* | Select-String -Pattern "foobar" | Select-Object -Unique Path

या उपनाम का उपयोग करते हुए एक छोटा संस्करण:

dir -recurse *.* | sls -pattern "foobar" | select -unique path

तुम सिर्फ फ़ाइल नाम, नहीं पूर्ण पथ चाहते हैं, की जगह Pathके साथ Filename


स्पष्टीकरण:

  1. Get-ChildItem-Recurse *.* वर्तमान निर्देशिका और उसके सभी उपनिर्देशिकाओं में सभी फाइलें लौटाता है।

  2. Select-String-Pattern "foobar" दिए गए पैटर्न "फोब्बर" के लिए उन फ़ाइलों को खोजता है।

  3. Select-Object-Unique Pathप्रत्येक मैच के लिए केवल फ़ाइल पथ देता है; -Uniqueपैरामीटर डुप्लिकेट समाप्त करता है।


select -Unique... शांत, कुछ नया सीखा। यह पूरी तरह से काम करता है, धन्यवाद!
माइकल क्रोपट

है वास्तव में जरूरत है? Get-ChildItem -Recurse ठीक वैसा ही काम करता है जैसा मैं सोचता हूं।
पायोत्र पेरक

1
या इससे भी अधिक संक्षेप में, gci -r | sls "फोब्बर" | चुनिंदा रास्ता
डेविड मार्क

यदि कोई मैच नहीं है तो PowerShell "लटका" लगता है, यह वापस नहीं आएगा। जब कोई मिलान नहीं होता है तो किसी को कैसे पता चलता है कि खोज की गई है?
रेगेग्युगिटर

2

ध्यान दें, कि शक्तियां v1.0 और v2.0 में आपको काम करने के लिए पहले स्थिति पैरामीटर (पथ) निर्दिष्ट करने की आवश्यकता है -Recursion

तकनीकी दस्तावेज

-Recurse

निर्दिष्ट स्थानों में और स्थानों के सभी बच्चे के आइटम में आइटम हो जाता है।

Windows PowerShell 2.0 और Windows PowerShell के पुराने संस्करणों में, Recurse पैरामीटर केवल तभी काम करता है जब पथ पैरामीटर का मान एक कंटेनर होता है, जिसमें बाल आइटम होते हैं, जैसे C: \ Windows या C: \ Windows *, और नहीं जब यह एक आइटम में बाल आइटम नहीं हैं, जैसे C: \ Windows * .exe।


1

निर्देशिका के अंदर नीचे दिए गए कमांड का उपयोग करें जिसे आप "grep" [SEARCH_PATTERN]करना चाहते हैं और जो आप मैच करना चाहते हैं उससे मिलान करने के लिए बदलें । यह पुनरावर्ती है, निर्देशिका में सभी फ़ाइलों के माध्यम से खोज कर रहा है।

dir -Recurse | Select-String - pattern [SEARCH_PATTERN]

http://www.jamescoyle.net/how-to/1205-how-to-use-powershell-to-recursively-search-for-text-within-files-on-windows


0

चयन-स्ट्रिंग में -Listइस उद्देश्य के लिए एक पैरामीटर है:

प्रत्येक इनपुट फ़ाइल में केवल पहला मैच लौटाएँ। डिफ़ॉल्ट रूप से, चयन-स्ट्रिंग पाया गया प्रत्येक मैच के लिए एक MatchInfo ऑब्जेक्ट देता है।

- ss64.com

आप इसे इस तरह से उपयोग कर सकते हैं:

gci -Recurse | sls -List FOOBAR

यहाँ कुछ नमूना परिणाम दिखते हैं (विंडोज एसडीके के लिए खोज ERROR_SUCCESS):

shared\bthdef.h:576:#define BTH_ERROR(_btStatus)   ((_btStatus) != BTH_ERROR_SUCCESS)
shared\netioapi.h:2254:    ERROR_SUCCESS on success.  WIN32 error code on error.
shared\rpcnterr.h:34:#define RPC_S_OK                          ERROR_SUCCESS
shared\winerror.h:214:// MessageId: ERROR_SUCCESS
um\advpub.h:40://      ERROR_SUCCESS_REBOOT_REQUIRED        Reboot required.
um\bluetoothapis.h:243://      ERROR_SUCCESS
um\ClusApi.h:571:_Success_(return == ERROR_SUCCESS)
um\dsparse.h:102:_Success_(return == ERROR_SUCCESS)
um\eapmethodpeerapis.h:228:// If the function succeeds, it returns ERROR_SUCCESS. Otherwise, it is
um\eappapis.h:56:// If the functions succeed, they return ERROR_SUCCESS. Otherwise, it is
um\MapiUnicodeHelp.h:583:                if ((hkeyPolicy && RegQueryValueExW(hkeyPolicy, szName, 0, &dwType, (LPBYTE)
&dwLcid, &dwSize) == ERROR_SUCCESS && dwType == REG_DWORD) ||
um\Mddefw.h:127:            routine will return ERROR_SUCCESS and the inherited data even if
um\Msi.h:1693:// Returns ERROR_SUCCESS if file is a package.
um\MsiQuery.h:192:// Returns ERROR_SUCCESS if successful, and the view handle is returned,
um\msports.h:46:    ERROR_SUCCESS if the dialog was shown
um\ncryptprotect.h:164:    ERROR_SUCCESS
um\NTMSAPI.h:1761:_Success_ (return == ERROR_SUCCESS)
um\oemupgex.h:108://  Returns:    ERROR_SUCCESS in case of success, win32 error otherwise
um\PatchWiz.h:90://                     ERROR_SUCCESS, plus ERROR_PCW_* that are listed in constants.h.
um\Pdh.h:415:_Success_(return == ERROR_SUCCESS)

यदि आप वास्तविक FileInfoवस्तुओं (सापेक्ष पथ और एकल मैच परिणाम के बजाय) को वापस प्राप्त करना चाहते हैं , तो आप इसे इस तरह उपयोग कर सकते हैं:

Get-ChildItem -Recurse -File | where { Select-String -Path $_ -List -Pattern FOOBAR }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.