tags:

views:

135

answers:

3

This doesn't work,

Runtime.getRuntime().exec("stat /*");

nor this;

Runtime.getRuntime().exec(new String[] {"stat", "/*"})

Is there any way around it ?

Thanks,

+5  A: 

The asterisk is expanded by the shell (this is called globbing). So you actually want to execute the /bin/sh executable (most likely - substitute another shell here if required), and invoke stat /* from that. e.g. execute:

/bin/sh -c "stat /*"

from your Java process. -c specifies that /bin/sh executes whatever is in the string following the -c.

Alternatively you could perform the /* expansion yourself by finding all the files in the root directory in Java, and then pass those as args to stat.

Brian Agnew
+1  A: 

You could delegate the task to the shell, like Brian Agnew said, or use Java to list all the files and directory in / (through Apache IO, for example), and replace /* by the right list.

Valentin Rocher
A: 

These answers didn't work so I created a shell file in which i wrote;

stat $1*

so whenever I need that asterisk to be added i call this file without it,

Runtime.getRuntime().exec("/my_shell_file /miki/");

it adds the asterisk for me and gives me back the output I need, as it runs:

stat /miki/*

Cheers,

Devrim