在Java程序中,我想在目录.file.xyz
中找到隐藏文件/my/dir
的路径。它包含一个不应搜索的子文件夹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());
}
如果我将命令粘贴到终端中并在其中执行。很好。
我的操作系统是Ubuntu 16.04。
你能解释一下为什么吗?
答案 0 :(得分:0)
您需要调用“ sh”并将管道命令传递给该程序。 试试:
ProcessBuilder b = new ProcessBuilder( "/bin/sh", "-c",
"find /my/dir -path /my/dir/excludedFolder -prune -o -name .file.xyz -print" );
答案 1 :(得分:0)
您使用了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
数组传递给exec()
:
String findCommand[] = { "find", "/my/dir", "-path",
"/my/dir/excludedFolder", "-prune", "-o", "-name", ".file.xyz", "-print" };
...
Runtime.getRuntime().exec(findCommand);