[ubuntu-za] Script error

Jonathan Hitchcock jonathan at vhata.net
Tue Apr 14 13:33:27 BST 2009


Hi,

On 14 Apr 2009, at 2:20 PM, Alf Stockton wrote:
> #/bin/dash
> if [ -f /mnt/backup/mailbackups/*.dotproject.files.tar.gz ]
>     then
>     rm /mnt/backup/mailbackups/*.dotproject.files.tar.gz
> fi
>
> and I keep getting the error:-
>
> ./DingDong.sh: line 2: [: too many arguments

When you have a * on a commandline, the shell replaces it with all the  
files that match that pattern.  So if you have files like the following:

/mnt/backup/mailbackups/foo.dotproject.files.tar.gz
/mnt/backup/mailbackups/bar.dotproject.files.tar.gz

Then the 'if' statement above will be expanded to the following:

if [ -f /mnt/backup/mailbackups/foo.dotproject.files.tar.gz /mnt/ 
backup/mailbackups/bar.dotproject.files.tar.gz ]

This happens before the 'if' statement is evaluated.  And, of course,  
the "-f" test does not take more than one filename as an argument,  
which is why you're getting the "too many arguments" error.

Basically, you can't use "-f" to test for the existence of "any file  
matching this pattern".  If you wanted to do that, you would have to  
do something like evaluating the pattern, storing it in a variable,  
and testing the length of the variable, or something.

But it seems that all you want to do is remove any files matching that  
pattern, if they exist.  If that is the case, then just replace the  
whole thing with:

rm -f /mnt/backup/mailbackups/*.dotproject.files.tar.gz

The '-f' means 'unconditionally', or, in other words "whether they  
exist or not".




More information about the ubuntu-za mailing list