This week's book giveaway is in the Jobs Discussion forum.
We're giving away four copies of Java Interview Guide and have Anthony DePalma on-line!
See this thread for details.
The moose likes Java in General and the fly likes Passing wilcard * in Runtime.exec() command Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login

Win a copy of Java Interview Guide this week in the Jobs Discussion forum!
JavaRanch » Java Forums » Java » Java in General
Bookmark "Passing wilcard * in Runtime.exec() command" Watch "Passing wilcard * in Runtime.exec() command" New topic

Passing wilcard * in Runtime.exec() command

Srikanth Kumar
Ranch Hand

Joined: Jun 04, 2008
Posts: 36
Hey all,
I need to delete all the files that starts with ABC. For this now i'm using Runtime.exec and passing the parameter "rm -r /usr/tmp/ABC*". But amazingly it does not delete the directories. Infact if i try to delete a directory in one attempt then it seems its ok like if i pass "rm -r /usr/tmp/ABC-123".
Why the Runtime.exec() is not recognizing/allowing to pass wildcard characters? Or is there any other way to do so.

Thanks in advance.

Srikanth Kumar
Srikanth Kumar
Ranch Hand

Joined: Jun 04, 2008
Posts: 36
I am using Linux/Unix machine(s)
Ernest Friedman-Hill
author and iconoclast

Joined: Jul 08, 2003
Posts: 24199

When you type a wildcard at a UNIX command prompt, it's the shell program (i.e., bash) that interprets it. When you use Runtime.exec() to execute rm, there's no shell involved. rm gets the asterisk character itself, and doesn't treat it as a special character.

Run a shell, and use the shell to run rm; i.e., like

Runtime.exec(new String[] { "sh", "-c", "rm /tmp/ABC*" });

[Jess in Action][AskingGoodQuestions]
Andrei Matyas

Joined: Apr 15, 2007
Posts: 25
On linux you should do something like this :

Zemian Deng

Joined: Jun 12, 2007
Posts: 21

I hope you just use "rm" as example to use System.exec, as it not portable to other OS systems. Using is more safe. Of course you will have to recurse and make sure all files are delete before a directory is to be removed as well.
I agree. Here's the link:
subject: Passing wilcard * in Runtime.exec() command
It's not a secret anymore!