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'返回错误
- 将log4j 1.2配置转换为log4j 2配置 2022-01-01
- C++ 和 Java 进程之间的共享内存 2022-01-01
- 如何使用WebFilter实现授权头检查 2022-01-01
- Spring Boot连接到使用仲裁器运行的MongoDB副本集 2022-01-01
- Jersey REST 客户端:发布多部分数据 2022-01-01
- 从 finally 块返回时 Java 的奇怪行为 2022-01-01
- value & 是什么意思?0xff 在 Java 中做什么? 2022-01-01
- Java包名称中单词分隔符的约定是什么? 2022-01-01
- Safepoint+stats 日志,输出 JDK12 中没有 vmop 操作 2022-01-01
- Eclipse 插件更新错误日志在哪里? 2022-01-01