2012-05-07 15 views
2

与えられたディレクトリを見つけることができる(unix)コマンドはありますか?与えられたディレクトリを見つけるコマンド

たとえば、「MyDir」という名前のディレクトリがありますが、ディスク上の絶対パスはわかりません。私がMyDirへの道を与えるというコマンドはありますか?

具体的には、私はJavaプログラム(システムコール経由)でこれを行いたいと思います。

// return the full path to the specified directory 
// if there's more than once directory with the given name 
// just return the first one. 
static String findPath (String dirName) 
{ 
    // CODE here 

} 

ありがとう!

答えて

0

locateコマンドが利用可能であれば(一部のシステムでインデックスを有効にしていない可能性があります)、システム上のすべての読み込み可能なディレクトリ内のファイルのパスに対して部分文字列一致を実行します。 locateコマンドに代わる方法として

1

UNIXの場合は、locateコマンドを使用できます。 updatedbを定期的に(ただし、自動的に)実行することを忘れないでください。

実際にJavaでコマンドラインコマンドを実行するには、this articleをチェックしてください。基本的なコマンドはRuntime#execですが、何らかのエラーチェックが必要です。記事で提供抜粋です:

import java.io.*; 

public class JavaRunCommand { 

    public static void main(String args[]) { 

     String s = null; 

     try { 

     // run the Unix "ps -ef" command 
      // using the Runtime exec method: 
      Process p = Runtime.getRuntime().exec("ps -ef"); 

      BufferedReader stdInput = new BufferedReader(new 
       InputStreamReader(p.getInputStream())); 

      BufferedReader stdError = new BufferedReader(new 
       InputStreamReader(p.getErrorStream())); 

      // read the output from the command 
      System.out.println("Here is the standard output of the command:\n"); 
      while ((s = stdInput.readLine()) != null) { 
       System.out.println(s); 
      } 

      // read any errors from the attempted command 
      System.out.println("Here is the standard error of the command (if any):\n"); 
      while ((s = stdError.readLine()) != null) { 
       System.out.println(s); 
      } 

      System.exit(0); 
     } 
     catch (IOException e) { 
      System.out.println("exception happened - here's what I know: "); 
      e.printStackTrace(); 
      System.exit(-1); 
     } 
    } 
} 

そうでない場合、あなたは可能性がWalk the File Tree(NIO.2を使用して、Javaネイティブ)。ただし、キャッシュされていないため、これはおそらく時間がかかります。

+0

オムだろう見つけ、私は私が何を望むかについて間違った印象を与えた間違った単語を選択した可能性があります行う。私は 'locate'のマニュアルを見ていて、データベースから何かを見つけているようです。しかし、私のプログラムは、データベースに依存せずに実行する必要があります。検索ウィンドウ(Windowsの場合はFinder、Mac OSの場合はFinder)を開いて検索すると想像してください。 –

+2

locateデータベースは、上記のupdatedbコマンドを使用してsysadminによって管理されているデータベースです。これは、実行しているシステムのファイルシステムを反映したデータベースです。基本的には、Windows/Finder検索でインデックス付きファイルシステムの検索を高速化するのと同じ種類のデータベースです。そのインデックスに依存したくない場合は、findコマンドを使用してください。私の答えを見てください。 – Sbodd

0

(たとえば、必要なデータベースが維持されていない、場合)、あなたは「find」コマンドを使用することができます。

find/-type d -name Foo 

はFooという名前のディレクトリを検索します。この呼び出しファイルシステムの '/'の下のどこにでも置くことができます。これは非常に遅くなる可能性があることに注意してください。もし 'locate'が利用可能であれば、おそらくはるかに良くなります。

0

正確なコマンドは、

locate -r ~/".*"MyDir 

とDBをリフレッシュするために必要であれば、

sudo updatedb 
関連する問題