2011-07-14 10 views
2

に{ 『$ _』}は」行動:エイリアス私は「見つける」のUnixをエミュレートするために、次のコードを使用したいのPowerShell

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

は実際には、他のコマンドがいくつかあります私はこれに| foreach { "$_" }を追加したいと思います。だから、これを簡単に入力できる方法を見つけようとしています。

+0

タイピングが少なくて済むようにマイクロ最適化を行うと、foreachキーワードの代わりに%を使用することになります。 – Goyuix

+1

検索するパターンが複数ある場合(* .cpp、*。hなど)は、includeの代わりに '-filter'パラメータを使用して、パフォーマンスを向上させてください。小さなディレクトリでは問題にならないかもしれませんが、大きなディレクトリとネットワーク共有には違いがあります。 –

+0

異なるPowerShellとUnixシェルの違いは非常に興味深いです。はるかに少ない動的。私はこのような(bash)関数を持っています: 'le(){" $ @ "|もっと少なく; } ' この関数は任意のコマンドを実行して、それより少ないパイプでパイプすることができます。しかし、Shayの答えを見れば、PowerShellではこのようなことができないと思います。 – hibbelig

答えて

4

は単にGet-ChildItem(別名lsdir-nameスイッチを使用することを考えてみましょう):

ls DIRECTORY -recurse -include PATTERN -name 

この方法はネイティブでクリーンで効果的です。

+0

はい、これは本当に効果的です - KISS!私はこれを使用すると思う。 – hibbelig

2

は、それが拡張することができ、これを試してみてください...

xfind DIRECTORY -recurse -include PATTERN 

しかし、それは間違ったことを行うように見えた:私はこのようなものを試してみました:

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

そして私はそうのようにそれを呼び出しました本格的な高度機能に鍵は高度な機能でavaialbleある特殊変数(PSBoundParameters)を使用して、それらのすべてを渡すことで、LSにパラメータを渡すことです:

function xfind { 

    [cmdletbinding()] 

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

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

これは、 'param(...)'の引数が 'ls'コマンドレットのシグニチャを複製しているので、汎用の" foreach foreach "関数を書くことができないようです。実際はそうですか? – hibbelig

+0

ありがとうございます。それは私が尋ねた質問に正確に答えます。あなたが '-Name'スイッチを認識していなかったので、私はまだ他の答えを選んだのではないかと心配しないでほしい、と思っています。 – hibbelig

+0

害はありません:)「foreachを追加してください」とは何ですか? –

関連する問題