Java_LINUXへ外部コマンド実施、出力取得し正常に表示、実行結果取得と判定
Javaからの外部コマンド&findコマンドでのファイル削除でかなり苦戦したが、
findには削除用のオプションがあってホッとした。
他にも「-ls」などがあるのでオプションを確認するとよい。
try { String deleteFileCmdLine = "find /work/testDir -type f -mtime +5 -delete"; String[] deleteFileCmdArray = deleteFileCmdLine.split("[\\s]+"); ProcessBuilder deleteFileBuilder = new ProcessBuilder(deleteFileCmdArray); //標準エラー出力をマージして出力する deleteFileBuilder.redirectErrorStream(true); Process deleteFileProcess = deleteFileBuilder.start(); // Eclipse上文字化けしないように文字コードを指定 BufferedReader reader = new BufferedReader( new InputStreamReader(deleteFileProcess.getInputStream(), "UTF-8")); StringBuffer ret = new StringBuffer(); String line = null; //標準エラー出力を標準出力にマージして出力 // 出力をさせないとコマンドの結果を取得できないため出力させる while ((line = reader.readLine()) != null) { ret.append(line + "\n"); } int deleteFileResult = deleteFileProcess.waitFor(); if (deleteFileResult != 0) { System.out.println(ret.toString()); throw new Exception(); } } catch (Exception e) { System.out.println("想定外エラー"); }
【留意点】
動作保証はできかねますので、初回実施時にはまず「-ls」オプションなどで動作確認をオススメします。
外部コマンドとしてfindを使う場合はパイプが(おそらく)使えないので、
その場合はいったんパイプまでのコマンドの結果を取得してそちらに対して再度コマンドを
実行するようにしないといけないかなと思います。