Windows上でUnixタイプの "locate"?


13

WindowsのCLI(cmd)を使って、彼が名前の一部を知っているファイルをどのように見つけるのですか?たとえば、すべてのWindowsワークステーションでjavacが異なる場所にインストールされています。WindowsCLI(cmd)からどのようにしてそれを見つけることができるでしょうか。

グーグル私は、Windowsエクスプローラ(ファイルマネージャ)のGUIを使うか、フリーウェアのアプリケーションをダウンロードすることについてだけ言及しているのを見ます。 Windowsには本当にlocateコマンドが組み込まれていませんか?サーバー版にはありますか?私がやります ではない cygwinなどをインストールしたいのですが、これらは通常私のマシンではありません。


3
Windowsのコマンドラインに組み込まれているものは、locateに似ているものは何もありません。 locate32をお勧めします(( locate32.net
John T

javac 通常は同じ場所にあるはずです...
Tom Wijsman

その場所は機能しなくなりました - 更新されたlocate32ホームは locate32.cogit.net
TrojanName

回答:


21

あなたはあなたがする必要があることをすることができるはずです dir

dir [filename] /s

[filename]を探しているファイル名に置き換えてください。ワイルドカードを使用できるはずです。 / sを指定するとサブディレクトリが検索されるので、必要に応じてC:のルートから起動してドライブ全体をチェックします。


ドライブ全体で共通のファイル名を検索している場合は、/ pを含めると、一度に1ページの結果が表示されるだけで済みます。
Windos

ありがとう、これは完璧に見えます。少なくともC:\ WINDOWSで検索する必要があることを少なくともよく知っているので、検索にかかる時間を絞り込むことができます。
dotancohen

1
私はそうは思わない javac にインストールされている C:\WINDOWS...
Tom Wijsman

複数のドライブ/パーティションでは動作しません。そして2011年以前でさえ、私はC:Linuxのlocateがファイルシステムを気にしないこと以上のものを持っていました。
Jürgen A. Erhard

1
@JürgenA.Erhard公平になるために... Linux自体は、Windowsがファイルシステムを提示するので、「ファイルシステム」をあまり気にしていません。ただし、すべてのボリュームをまとめて、それらすべてにGet-ChildItemを適用することができます。
Windos

7

誰も「where」コマンドについて話しませんか?現在の環境のPATHで実行ファイルを検索します。

where <executable>

c:\ where
The syntax of this command is:

WHERE [/R dir] [/Q] [/F] [/T] pattern...

Description:
    Displays the location of files that match the search pattern.
    By default, the search is done along the current directory and
    in the paths specified by the PATH environment variable.

4

Windowsは最も直接的な答えを持っています。しかし、あなたがコマンドラインを好むのなら、PowerShellも見たいと思うかもしれません。同じ種類の検索を実行するには

get-childitem [starting path eg c:\users\] -filter [wildcarded search or filename] -recurse

これには、便利なforeachステートメントに入力して検索結果に対してプロセスを実行できるという利点があります。

get-childitem [starting path eg c:\users\] -filter [wildcarded search or filename] -recurse |
    foreach ($_){
          [do something to $_.fullname , like maybe display my image file or relocate it etc..]
    }

2
これはタイプするには長すぎます。
Tom Wijsman

2
Get-ChildItemは、次のように省略することができます。 gci または ls
digitxp

幸いなことに、とは異なり cmdで、 PowerShell Linuxのように、 "Tab"を使って提案を見ることができます。実際に入力するのはそれほど多くありません。そして、私の場合、 ls PowerShellで動作していません。
WesternGun

3

私は単純に Windows用のプログラムを見つけます 。あなたはちょうど私に読んでください指示に従って、system32に.dllファイルと.exeをコピーする必要があります。

別の方法としては、プログラムパスを環境変数PATHに追加することが挙げられます。

その目的は、locateのようなものを探しているのなら、Windows上でlocateを取得することです。 :)


チーク、ありがとう、それは便利なアプリケーションのように見えます。しかし、私は彼らが通常そうであるように私はシステムにアプリケーションをインストールすることはできませんことを述べました ではない 私のシステム
dotancohen

はい、しかし私はとにかく私のような他の人々がそれが有用であると思うことができるので答えました、そして、この記事はすでに受け入れられた答えを持っているので他の人は混乱しません!
Cheeku

locate 私のWin7のコンピュータにあります。インストールが3ヶ月以内であるとき、データベースが435日前であることについて不平を言います。そして updatedb 含まれていません。
vinnief

@vinniefこれはあなたのインストール環境に特に問題があると思います。
Cheeku

1
@Cheeku - これは同じアプリです John Tが指摘した 。 OPが尋ねたようにそれはCLIではないです、しかしそれは素晴らしいです。
sancho.s

2

問題は多少あいまいです。

あなたは(OPの本文に記載されている)ファイルを検索したいのですが、(タイトルに記載されている) "locate-type"コマンド/アプリも必要です。大きな意味を持つ微妙な検討事項が1つあります。あなたは2つの異なる方法で見つけることができます:

  1. 各検索でターゲットツリー構造を直接検索する(遅い)。

  2. 最初にターゲットツリー構造のデータベースを作成し(時間がかかる場合があります)、次にデータベースを検索して(非常に高速に)検索します。データベースは検索で良い結果を得るために定期的に更新されなければなりません。見る http://en.wikipedia.org/wiki/Locate_%28Unix%29

Unix locate は "タイプ2"ですが、あなたのOPの本体によると、あなたは2つの方法のどれでも問題ないでしょう。さらに、CLIオプションについて具体的に質問します。

いくつかのオプションを以下にリストし、それらがCLI / GUIであるかどうかを指定し、1/2とタイプし、そしていくつかのコメントを加えます。

  1. http://locate32.cogit.net/ (すでに指さした ジョンT そしてそれから チーク ) GUI、タイプ2。ポータブルバージョンがあります。卓越した使いやすさ、および設定可能性。 Unixと非常によく似ています locate (私はこれを使っていてとても気に入りました)
    注意 :Unixに慣れている Updatedb データベースの更新にはかなりの時間がかかります(もちろん、スキャンしたツリーのサイズによって異なります)。 locate32 極めて 速いです。私はそれがどのようにそれほど改善されることができるかわかりません。

  2. http://sourceforge.net/projects/winlocate/ CLI、タイプ2

  3. dir [filename] / s Windowsによる解決策 。 CLI、タイプ1

  4. gci ... OldWolfによる解決策 。 CLI、タイプ1

  5. http://gnuwin32.sourceforge.net/packages/findutils.htm CLI、タイプ2

  6. すべて GUI、タイプ?


1
ありがとう、これは良い説明であり、オプションの素晴らしいまとめです。
dotancohen


2

手動でインストールする必要はありません。見る http://chocolatey.org

choco install winlocate

シェル環境を再起動

Updatedb.bat -a
Locate.bat somefile

winlocateは(もう)Chocolateyにはありません。
Lennart

2

私はこれがずっと前に答え​​られたことを知っています、しかし、これはunix / linuxで使われているロケート機能をシミュレートするための私のスクリプトです

これをlocate.batという名前で保存してSystem32に配置するか、保存されているディレクトリから実行します。このようなパラメータを1つ取ります。 "cmd&gt; locate javac.exe"

locate / cスイッチ(2番目のパラメータとしてインスタンス数を数える) そして/を探しますヘルプテキストを表示します

@echo off 
if [%1]==[] goto :usage
if [%1] == [/?] (
:usage
echo Usage: 
echo locate "filename" { optional } /c { shows counter }
echo note:  results are exported to C:\temp\result.txt
goto :EOF
) else (
     setlocal EnableDelayedExpansion
     dir /a /b /s C:\ | findstr /I "%1" > C:\temp\result.txt 
     type C:\temp\result.txt | more /S
     set counter=0
     if [%2] == [/c] (
         for /F %%i in ('type C:\temp\result.txt') do (
             set /a counter=!counter!+1
         )
         echo Total Matches: !counter!
      ) 
)
endlocal > nul  
goto :EOF

編集:(更新されたスクリプト、より整理され、ファイル名だけでなくあらゆる検索語を許可するなど、より多様な状況に対処できる)

@echo off
::initialize local varaibles to default values
setlocal

set file=
set directory=
set toppath=top

::some switch validation ( from command line )
if [%1]==[] goto :Usage
if [%1]==[/?] goto :Usage
if [%1]==[/help] goto :Usage

::handle switches with if structures
if [%2]==[/c] (
     set count=yes
) ELSE (
     if [%2]==[/t] ( if [%3]==[] (goto :Usage) else (set toppath=%3))   
     if [%4]==[/c] (
          set count=yes
     ) ELSE (
          set count=
     )
)
set file=%1

::Directory Validation ( Goto jumps possible, along with raptors ) 
if [%toppath%] == [] ( 
    IF NOT EXIST %toppath% goto :FolderInvalid 
) else (
    if [%toppath%] neq [top] set directory=%toppath%
)
set toppath=
setlocal EnableDelayedExpansion

::Run Bulk of the Script
dir /a /b /s %directory% | findstr /I "%file%" > C:\temp\result.txt 
type C:\temp\result.txt | more /S
     set counter=0
     if [%count%]==[yes] (
         for /F %%i in ('type C:\temp\result.txt') do (
             set /a counter=!counter!+1
     )
     echo Total Matches: !counter!
) 

goto :End

:Usage
echo locate ^[file^] {term^/file to look for} ^| ^[^/t^] {dir^/subdirs to search} ^| ^[^/c^] {show counter}
echo.
echo notes to user:  1. Results are exported to C:\temp\result.txt
echo                 2. Default search dir is the current unless specified by ^/t switch
echo                 3. For best results write switches in order given ! ( or beware of raptors )
goto :End

:FolderInvalid
echo Folder Invalid

:End
endlocal > nul

0

将来の宇宙のWindows歴史家のために:私たちはに恵まれています すべて検索 。 Picture dmenu + find + mlocateは、cliオプション付きの、きわめて小さなWindowsサービスにまとめられました。これ以外のインデックスを更新する リアルタイム 。 Linux上では何も近づきません。それはあなたが「私はこのdarnカーネルがもう少しMicrosoftyであったことを望みます」と言うであろう数回のうちの1つになるでしょう


0

簡単に言えば、 Windowsではまったく同じではありません 。これを回避するには、 方向 コマンド。これは特殊文字をサポートするディレクトリリストコマンドであり、受け入れられた回答で指摘されているように使用できます。

探します 多くのUnix系システムでのコマンドはインデックスベースの検索です。それはと連携して動作します Updatedb ファイルシステムを索引付けするコマンド。これはインデックスベースの検索なので、通常はテキストベースの検索コマンドよりもはるかに高速です。 方向 そして 見つける Unixでは、特に深いディレクトリ階層を検索するときには。


-3

私は、Windowsでこれを実行するためのCLIメソッドを知りません。 Windows CLIは一般のユーザーによって放棄されてきたため、一般的には成熟していないツールのセットを提供しています。あなたの最善の策はGNUを使うことでしょう find あなたがから得ることができるWindowsでは、 GnuWin32 。あなたがスクリプトを開発しているなら、あなたはただ含める必要があるでしょう find.exe スクリプトとの依存関係(心配しないでください、それほど大きくはありません)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.