find 命令不适用于 java,但适用于系统 shell
find command works not on java, but in system shell
在 Java 程序中,我想在目录 /my/dir
中找到隐藏文件 .file.xyz
的路径。这包含一个不应搜索的子文件夹,即 excludedFolder
.
所以我用 find
搜索这个文件。我用 -prune
排除了所需的文件夹。
String findCommand = "find /my/dir -path /my/dir/excludedFolder -prune -o -name .file.xyz -print";
try{
Process process = Runtime.getRuntime().exec(findCommand);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
//nothing is shown here, but hsould
bufferedReader.lines().forEach(System.out::println);
}catch(Exception e){
System.err.println(e.getMessage());
}
如果我将命令粘贴到终端并在那里执行。它工作正常。
我的 OS 是 Ubuntu 16.04.
你能解释一下为什么吗?
您需要调用 "sh" 并将您的管道命令传递给该程序。
尝试:
ProcessBuilder b = new ProcessBuilder( "/bin/sh", "-c",
"find /my/dir -path /my/dir/excludedFolder -prune -o -name .file.xyz -print" );
您使用了 the Runtime
class 的错误 exec()
函数。
给定
String findCommand = "find /my/dir -path /my/dir/excludedFolder -prune -o -name .file.xyz -print";
Java代码
Runtime.getRuntime().exec(findCommand);
将尝试 运行 字面上命名为 "find /my/dir -path /my/dir/excludedFolder -prune -o -name .file.xyz -print"
的文件作为命令。
您想将参数传递给 find
,而不是 运行 一些文件名看起来像命令的长命令。为此,您需要将 String
array 传递给 exec()
:
String findCommand[] = { "find", "/my/dir", "-path",
"/my/dir/excludedFolder", "-prune", "-o", "-name", ".file.xyz", "-print" };
...
Runtime.getRuntime().exec(findCommand);
在 Java 程序中,我想在目录 /my/dir
中找到隐藏文件 .file.xyz
的路径。这包含一个不应搜索的子文件夹,即 excludedFolder
.
所以我用 find
搜索这个文件。我用 -prune
排除了所需的文件夹。
String findCommand = "find /my/dir -path /my/dir/excludedFolder -prune -o -name .file.xyz -print";
try{
Process process = Runtime.getRuntime().exec(findCommand);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
//nothing is shown here, but hsould
bufferedReader.lines().forEach(System.out::println);
}catch(Exception e){
System.err.println(e.getMessage());
}
如果我将命令粘贴到终端并在那里执行。它工作正常。
我的 OS 是 Ubuntu 16.04.
你能解释一下为什么吗?
您需要调用 "sh" 并将您的管道命令传递给该程序。 尝试:
ProcessBuilder b = new ProcessBuilder( "/bin/sh", "-c",
"find /my/dir -path /my/dir/excludedFolder -prune -o -name .file.xyz -print" );
您使用了 the Runtime
class 的错误 exec()
函数。
给定
String findCommand = "find /my/dir -path /my/dir/excludedFolder -prune -o -name .file.xyz -print";
Java代码
Runtime.getRuntime().exec(findCommand);
将尝试 运行 字面上命名为 "find /my/dir -path /my/dir/excludedFolder -prune -o -name .file.xyz -print"
的文件作为命令。
您想将参数传递给 find
,而不是 运行 一些文件名看起来像命令的长命令。为此,您需要将 String
array 传递给 exec()
:
String findCommand[] = { "find", "/my/dir", "-path",
"/my/dir/excludedFolder", "-prune", "-o", "-name", ".file.xyz", "-print" };
...
Runtime.getRuntime().exec(findCommand);