views:

331

answers:

2

i'm trying to remove junk files by using

Process p = Runtime.getRuntime().exec();

it works fine as long as i do not use wildcards, i.e. this works:

Process p = Runtime.getRuntime().exec("/bin/rm -f specificJunkFile.java");

while the following throws back "No such file or directory":

Process p = Runtime.getRuntime().exec("/bin/rm -f *.java");

i should be able to do all the nice things as outlined here, right?

+5  A: 

Those are Bash wildcards. They are interpreted within the Bash shell. You are running rm directly, so there is no shell to interpret the * as 'all files'.

You could use bash as the command. e.g.:

Runtime.getRuntime().exec("/path-to/bash -c \"rm *.foo\"")

z5h
okay i'm doing:Runtime.getRuntime().exec("/bin/bash -c \"rm *.foo\"");and i'm getting:ERROR>*.foo": -c: line 0: unexpected EOF while looking for matching `"'this i do not understand... the escapes are correct aren't they?
Jakob
+2  A: 

Might I suggest that you let Java do this for you?

  • Use file.listFiles() to get the list of files
  • Use file.getName().contains(string) to filter them if needed
  • iterate over the array performing file.delete()

Advantage: improved portability, saves the cost of an exec()

Dennis Williamson
oh my... this works like a charm! thanks
Jakob