[ubuntu-za] Script error

Alf Stockton alf at stockton.co.za
Tue Apr 14 13:54:20 BST 2009


Walter Leibbrandt wrote:
> Alf Stockton wrote:
>> Jonathan Hitchcock wrote:
>>   
>>> 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".
>>>
>>>
>>>     
>> Then I am certainly confused as the following works fine in another script.
>>
>> if [ -f /mnt/backup/mailbackups/*.dotproject.backup.sql ]
>>      then
>>      rm /mnt/backup/mailbackups/*.dotproject.backup.sql
>>      fi
> That should not work if /mnt/backup/mailbackups/*.dotproject.backup.sql 
> expands to more than one filename.
> 
I realised that after sending the email......:-(

-- 
Regards,
Alf Stockton		www.stockton.co.za

Chicken Little only has to be right once.



More information about the ubuntu-za mailing list