如何转义java特殊字符并运行Linux命令
我正在编写一个java程序来查找目录中的特定文件(具有特殊权限的文件和按文件类型)。由于没有任何特殊字符,以下命令将正确执行如何转义java特殊字符并运行Linux命令,java,linux,escaping,Java,Linux,Escaping,我正在编写一个java程序来查找目录中的特定文件(具有特殊权限的文件和按文件类型)。由于没有任何特殊字符,以下命令将正确执行 find /home/Cnf271/Desktop/ -perm -4000 ; 现在,如果我尝试使用java程序执行以下命令,终端不会给出正确的结果 find /home/Cnf271/Desktop/ -name "*.txt" -perm -4000 -exec ls -ldb {} \; Java程序 // .. System.
find /home/Cnf271/Desktop/ -perm -4000 ;
现在,如果我尝试使用java程序执行以下命令,终端不会给出正确的结果
find /home/Cnf271/Desktop/ -name "*.txt" -perm -4000 -exec ls -ldb {} \;
Java程序
//
..
System.out.print("Please enter directory path: ");
fileDirectory = scan.next();
System.out.print("Please enter file type (txt/pdf): ");
fileType = scan.next();
filetypecmd = " \"*." +fileType+ "\" ";
System.out.println(filetypecmd);
String cmd = "find "+fileDirectory+ " -name "+filetypecmd+" -perm -4000" ;
Runtime run = Runtime.getRuntime();
Process process = run.exec(cmd);
BufferedReader buffer = new BufferedReader(new InputStreamReader(process.getInputStream()));
String space = "";
while ((space=buffer.readLine())!=null) {
System.out.println(space);
..
//
程序运行正常。但是,String cmd
命令没有给出正确的结果,因为linux命令用特殊字符包装。如何在java程序中执行以下命令
find /home/Cnf271/Desktop/ -name "*.txt" -perm -4000 -exec ls -ldb {} \;
谢谢。Linux命令shell需要被引用的元素(或转义的特殊字符)在被
Runtime.exec()执行时不需要被引用(它们不需要受到shell的保护)
在代码中,删除通配符搜索参数上的额外引号:
String filetypecmd = " *." + fileType + " ";
我对此进行了测试,并且能够在Linux上正确运行您的代码,但是我必须删除您的-perm-4000
参数才能在我的例子中获得结果。我收到了没有的结果,在“*.txt”
周围加了额外的引号,但没有它们,一切都很好
顺便说一句,您还可以使用扫描仪
收集结果:
Scanner results = new Scanner(process.getInputStream());
while (results.hasNextLine())
{
System.out.println(results.nextLine());
}
您是否在之前尝试过双反斜杠\\
代码>字符?我没有看到您添加顺便说一下,Java代码中的代码>字符。Java也使用反斜杠来转义,所以您可能必须在字符串中“双转义”字符…@MaartenBodewes是的,我尝试了反斜杠。filetypecmd=“\”*。“+fileType+”\”;我的java程序中没有语法错误。我认为linux不会执行该命令,因为它包含反斜杠等其他字符。现在,如果我使用转义字符来隐藏java语法错误,java程序可以正常工作。但是当命令在linux环境中运行时,它不会给出正确的结果。感谢:由于Java7,您还可以读取文件权限。搜索文件会很容易,避开了这个问题(XY问题)。@MaartenBodewes谢谢。但我正在尝试使用linux find命令执行该命令。非常感谢!另外,我在字符串cmd中添加了双引号以获得结果。String cmd=“find”+fileDirectory+“-name”+filetypecmd+“+”-perm-4000”;