WindowsでのUnix findコマンドに相当


34

WindowsのUnix findコマンドと同等のものは何ですか?

私は、find.exeWindows上のがより多くのようであることがわかりgrepます。私は特に同等のものに興味があります

find . -name [filename]

2
私の答えに何か問題がありますか?改善できますか?まだ助けが必要ですか?
JohannesM

申し訳ありませんが、私はしばらく前にこのスレッドを見失っていました。あなたの答えと、それをすぐに受け入れないことをおforび申し上げます。
-ARV

回答:


21
dir <drive: [drive:]> /s | findstr /i <pattern>

-代替案-

dir /s <drive:>\<pattern>

dir c: d: /s | findstr /i example.txt

-代替案-

dir /s c:\example.txt

dir c: /s example.txt動作します。
-DevSolar

@DevSolarコマンドを再確認できますか?Windows 5.1 Build 2600 SP3でテストしました。コマンドを実行すると、ディレクトリc内のファイルのリストが表示されます
JohannesM

1
あ、ごめんなさい。メモリから入力する権利を提供します。dir /s C:\example.txtそうです。
DevSolar

1
\bが簡単に使用する最も類似した結果(出力のみのパス)。find <folder> -name <pattern>-> dir /s /b <folder><pattern>。例find /tmp -name *.txt-> dir \s \b C:\temp\*.txt。ただし、dir常に絶対パスのリストを返しますが、find常に接頭辞が付いたパスを提供します<folder>
-Hashbrown

28

Find-ChildItemWindows Powershell のコマンドレットは、Unix / Linuxのfindコマンドに相当します

http://windows-powershell-scripts.blogspot.in/2009/08/unix-linux-find-equivalent-in.html

Find-ChildItemオプションの一部

  1. Find-ChildItem -Type f -Name ".*.exe"
  2. Find-ChildItem -Type f -Name "\.c$" -Exec "Get-Content {} | Measure-Object -Line -Character -Word"
  3. Find-ChildItem -Type f -Empty
  4. Find-ChildItem -Type f -Empty -OutObject
  5. Find-ChildItem -Type f -Empty -Delete
  6. Find-ChildItem -Type f -Size +9M -Delete
  7. Find-ChildItem -Type d
  8. Find-ChildItem -Type f -Size +50m -WTime +5 -MaxDepth 1 -Delete

開示:私はFind-ChildItemコマンドレットの開発者です


2
ありがとうございました。これは間違いなく、この質問に答える際に私が探しているものを念頭に置いています。
スーパーチーター

7
Find-ChildItem公式のコマンドレットではなく、PowerShellには含まれていません。このコマンドレットを誰かのOneDriveからダウンロードする必要があります。それと、bash、cygwin、unixutils、または単にUNIXを実行できる他のプログラムをダウンロードするだけで、違いはありませんfind
ワレン

19

追加のコマンドレットがインストールされていない場合は、単に次を使用できますGet-ChildItem

Get-ChildItem -Filter *.zip -Recurse $pwd

1
この場合、スクリプトを記述していない限りdir、おそらく短いエイリアス、lsまたはのいずれかを使用するgci必要があります。
スウォンキー

5

あなたはディレクトリ階層内のファイルを検索するためのUnixの検索を使用している場合は、PowerShellの道を使用することですGet-ChildItem(別名であるgci)コマンドレットをしてして結果をフィルタリングWhere-Object(別名があるwhere)コマンドレットを使用します。

たとえばC:\Users\、名前に「essential」という単語が含まれるすべてのファイルを検索するには、次のようにします。

PS> gci -Path "C:\Users\"  -Recurse | where {$_.Name -like '*essential*'}

この-likeオプションを使用すると、パターンマッチングにワイルドカードを使用できます。


2

これは正確にGNU findではありませんが、powershellの下でのlinuxコマンドラインの哲学とより一致しています:

PS> dir -recurse -ea 0 | % FullName | sls <grep_string>

例:

PS> cd C:\
PS> dir -recurse -ea 0 | % FullName | sls "Program" | sls "Microsoft"
PS> dir -recurse -ea 0 | % FullName | sls "Program" | sls "Microsoft" | out-gridview

注:「|%FullName」の後に返されるものはすべて、オブジェクトではなく文字列です。

ただし、Where演算子「?」を使用することもできますが、より多くの作業が必要になりますが、それほど高速ではありません。

PS> cd C:\
PS> dir -Recurse -ea 0 | ? FullName -like "*Program*" 
                       | ? FullName -like "*Microsoft*" 
                       | % FullName 
                       | out-gridview

簡単なショートカットを次に示します。

PS> function myfind {dir -recurse -ea 0 | % FullName | sls $args }

PS> cd C:\
PS> myfind "Programs" | sls "Microsoft"

#find all text files recursively from current directory
PS> myfind "\.txt$"

#find all files recursively from current directory
PS> myfind .

UnixUtilsの-exec grep {}が適切に機能しないのを見つけると、「そのようなファイルやディレクトリはありません」と思われます。このソリューション:PowerShell.exe -Command "dir -Recurse -ea 0 |?FullName -like '* .log' | sls error"、バッチスクリプト内から動作します。注:内部では一重引用符、外部では二重引用符を使用する必要があります。
ケビンフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.