Ubuntu: find: missing argument to -exec



Question:

The following works from the terminal no problem

find testDir -type f -exec md5sum {} \;  

Where testDir is a directory that contains some files (for example file1, file2 and file3).

However, if I run this from a bash script or from Java using something like

Runtime rt = Runtime.getRuntime();  Process pr = rt.exec("find testDir -type f -exec md5sum {} \\;");  

I get the following error

find: missing argument to `-exec'

Any ideas?

UPDATE: This was answered correctly over on stackoverflow. I will close the question here. https://stackoverflow.com/questions/10704889/java-execute-command-line-program-find-returns-error


Solution:1

The \ in -exec md6sum {} \; is necessary to prevent the shell from interpreting the ; character as command separator. If Java does not execute the command in a shell, try removing the escaping \\ so that the code becomes:

Runtime rt = Runtime.getRuntime();  Process pr = rt.exec("find testDir -type f -exec md5sum {} ;");  

I have just confirmed this behavior with the next test program:

import java.io.*;  class Xx {      public static void main(String args[]) throws Exception {          Process p = Runtime.getRuntime().exec("/bin/echo \\;");          InputStream in = p.getInputStream();          int c;          while ((c=in.read()) != -1)              System.out.write((char)c);          p.waitFor();      }  }  

Compiled with javac Xx.java, java Xx outputs \;. If I remove the \\, it'll print ; as expected.


Solution:2

Different shells sometimes require different characters to be escaped, so depending on what shell you are using in your terminal and what shell you are using for your script (you say bash, but are you sure?), you can get different results. Zsh, for example, will require you to escape the {} too:

find testDir -type f -exec md5sum \{\} \;  

From Java, you could try removing all the backslashes or changing your second line to:

Process pr = rt.exec("find testDir -type f -exec md5sum \\{\\} \\;");  

Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »