项目中有个需求是统计某目录下各种文件的大小,需要在程序里执行一个bash命令
public static List<String> execCommand(String command) {
List<String> result = new ArrayList<>();
String line ="";
try {
// 创建 ProcessBuilder 对象
ProcessBuilder processBuilder = new ProcessBuilder("/bin/bash", "-c", command);
// 启动进程
Process process = processBuilder.start();
// 读取进程输出
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
while ((line = reader.readLine()) != null) {
log.info("line:{}", line);
result.add(line);
}
// 等待进程执行完毕
process.waitFor();
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
return result;
}
find /path -type f \( -name "*bmp" -o -name "*gif" -o -name "*jpg" -o -name "*jpeg" -o -name "*png" -o -name "*doc" -o -name "*docx" -o -name "*xls" -o -name "*xlsx" -o -name "*ppt" -o -name "*pptx" -o -name "*html" -o -name "*htm" -o -name "*txt" -o -name "*rar" -o -name "*zip" -o -name "*gz" -o -name "*bz2" -o -name "*mp4" -o -name "*avi" -o -name "*rmvb" -o -name "*pdf" \) -exec du -csh {} + | grep 总用量
然后就出现了一个有趣的情况,同样一台服务器同一个jar包同一个命令,我部署的话,这个统计的接口就会报错Index 0,同事部署的话就不会出现问题,几个同事共同研究百思不得其解,最后排查得知,同样的命令,在MobaXterm中执行 输出为 total,而在FinalShell中执行,输出为"总用量" ,因此MobaXterm部署,grep不到关键字,导致调用这个接口为空,,,,修完之后大家都笑了.....