Java execute command line program #39;find#39; returns error(Java执行命令行程序find返回错误)
问题描述
以下从终端工作没问题
find testDir -type f -exec md5sum {} ;
其中 testDir 是包含一些文件(例如 file1、file2 和 file3)的目录.
Where testDir is a directory that contains some files (for example file1, file2 and file3).
但是,我在 Java 中使用以下内容时遇到错误
However, I get an error using the following in Java
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec("find testDir -type f -exec md5sum {} \;");
错误是
find: missing argument to `-exec'
我相信我正确地转义了字符.我尝试了几种不同的格式,但我无法让它工作.
I believe I am escaping the characters correctly. I have tried several different formats and I cannot get this to work.
更新 @jtahlborn 完美地回答了这个问题.但是该命令现在略有更改,以便在计算 md5sum 之前对目录中的每个文件进行排序,如下所示(我已经接受了原始问题的出色答案,所以如果他们能提出格式,我会买啤酒为此.我已经尝试了我能想到的所有组合,但没有成功.)
UPDATE @jtahlborn answered the question perfectly. But the command has now changed slightly to sort each file in the dir before calculating the md5sum and is as follows (I have already accepted the excellent answer for the original question so I'll buy somebody a beer if they can come up with the format for this. I have tried every combination I can think of following the answer below with no success.)
"查找 testDir -type f -exec md5sum {} + | awk {print $1} | sort |md5sum ;"
"find testDir -type f -exec md5sum {} + | awk {print $1} | sort | md5sum ;"
新更新
对于管道,你需要一个 shell,所以我最终得到了这个,它工作得很好,你仍然可以获得输出.
For pipe, you need a shell so I ended up with this, which works great and you can still get the output.
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec(new String[]
{
"sh", "-l", "-c", "find " + directory.getPath() + " -type f -exec md5sum {} + | awk '{print $1}' | sort | md5sum"
});
推荐答案
使用多参数调用 exec (否则你会被转义规则咬住).此外,由于您不是从 shell 脚本调用,因此您不需要转义分号:
use the multi-argument call to exec (otherwise you can get bitten by escape rules). also, since you aren't calling from a shell script, you don't need to escape the semicolon:
Process pr = rt.exec(new String[]{"find", "testDir", "-type", "f", "-exec", "md5sum", "{}", ";"});
这篇关于Java执行命令行程序'find'返回错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Java执行命令行程序'find'返回错误
基础教程推荐
- RabbitMQ:消息保持“未确认"; 2022-01-01
- REST Web 服务返回 415 - 不支持的媒体类型 2022-01-01
- 修改 void 函数的输入参数,然后读取 2022-01-01
- 问题http://apache.org/xml/features/xinclude测试日志4j 2 2022-01-01
- 无法复制:“比较方法违反了它的一般约定!" 2022-01-01
- 使用堆栈算法进行括号/括号匹配 2022-01-01
- 如何对 Java Hashmap 中的值求和 2022-01-01
- 存储 20 位数字的数据类型 2022-01-01
- Struts2 URL 无法访问 2022-01-01
- Spring AOP错误无法懒惰地为此建议构建thisJoinPoin 2022-09-13
