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

}

谢谢!

4

4 回答 4

1

如果它只是 Unix,您可以使用该locate命令。不过,不要忘记updatedb定期运行(最好是自动运行)。

要在 Java 中实际运行命令行命令,请查看这篇文章。基本命令是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);
        }
    }
}

否则,您可以遍历文件树(使用 NIO.2 的 Java 本机)。不过,这可能需要更长的时间,因为它没有被缓存。

于 2012-05-07T17:32:43.187 回答
0

locate命令(如果可用)(某些系统可能未启用构建其索引)将针对系统上所有世界可读目录中的文件路径执行子字符串匹配。

于 2012-05-07T17:32:46.687 回答
0

作为定位命令的替代方法(例如,如果没有维护所需的数据库),您可以使用 ' find' 命令:

find / -type d -name Foo

此调用将在文件系统上的“/”下的任何位置找到任何名为 Foo 的目录。请注意,这可能非常非常慢 - 如果“定位”可用,它可能会执行得更好。

于 2012-05-07T19:03:59.000 回答
0

确切的定位命令是,

locate -r ~/".*"MyDir

如果需要刷新数据库,

sudo updatedb
于 2013-11-21T08:31:01.197 回答