是否有任何(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 :(得分: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本机)。但这可能需要更长时间,因为它没有被缓存。
答案 1 :(得分:0)
locate
命令(如果可用)(某些系统可能没有启用其索引),将对系统上所有世界可读目录中的文件路径执行子串匹配。
答案 2 :(得分:0)
作为locate命令的替代方法(如果没有维护所需的数据库),您可以使用“find
”命令:
find / -type d -name Foo
此调用将在文件系统的“/”下找到任何名为Foo的目录。请注意,这可能非常非常慢 - 如果'locate'可用,那可能会表现得更好。
答案 3 :(得分:0)
确切的定位命令是,
locate -r ~/".*"MyDir
如果需要刷新db,
sudo updatedb