2011-07-14 39 views
2

我喜歡用下面的代碼,模仿Unix的「發現」的行爲:

ls DIRECTORY -recurse -include PATTERN | foreach { "$_" } 

事實上,有幾個其他命令我想追加這個| foreach { "$_" }到。所以我試圖找到一種方法來使這更容易打字。我想這樣的東西:

function xfind { 
    ls $args | foreach { "$_" } 
} 

然後我調用它像這樣:

xfind DIRECTORY -recurse -include PATTERN 

但似乎做了錯誤的事情...

+0

用於較少輸入的微型優化將使用%而不是foreach關鍵字。 – Goyuix

+1

除非您有多個模式可供搜索(如* .cpp,*。h),否則請使用'-filter'參數而不是include來提高性能。它可能無關緊要,但可以開始對大型展架產生影響,當然也可以在網絡共享上發揮作用。 –

+0

非常有趣的是如何從Unix shell中獲得不同的PowerShell。更不活躍。我有一個(bash)這樣的函數: 'le(){「$ @」|減; }' 這個函數可以運行任何命令並且通過更少的管道。但是我認爲這種類型的東西在PowerShell中是不可能的,如果我看看Shay的答案。 – hibbelig

回答

4

考慮簡單地使用-name開關的Get-ChildItem(又名lsdir ):

ls DIRECTORY -recurse -include PATTERN -name 

這種方式本地,乾淨,有效。

+0

是的,這真的很有效 - KISS!我想我會用這個。 – hibbelig

2

試試這個,它可以擴展完全成熟的高級功能。關鍵是通過使所有的人都利用一個特殊的變量(PSBoundParameters),其是avaialble在高級功能來傳遞參數到LS:

function xfind { 

    [cmdletbinding()] 

    param(
     [string[]]$path, 
     [switch]$recurse, 
     [string[]]$include 
    ) 

    ls @PSBoundParameters | foreach { "$_" } 
} 
+0

這看起來像'param(...)'中的參數正在複製'ls' cmdlet的簽名,因此不可能編寫通用的「append foreach」函數......實際上是這種情況嗎? – hibbelig

+0

非常感謝您的回覆。它恰好回答了我所問的問題。希望你不要介意我仍然選擇其他答案,因爲我不知道'-Name'開關,它非常有吸引力,所以我只是想使用它。 – hibbelig

+0

沒有傷害:)什麼是'追加foreach'? –