I'm writing a backup script for my email and cloud service.
For simplicity, I only posted the mail-backup part here.

Basically, I have a Host-Machine with some Virtual Boxes running in it.
These Virtual Boxes access Host-Machines' /mnt/alias/storage/ where there is the vmail folder (called shishaMail in my case)

(Following might not be necessary information)
I would like to say that everything within /mnt/alias/ is an ln -s from /mnt/rack/* with pretty names.
In this rack folder are the mounts of the drives.
(Not necessary information END)

Here is my script

# backup script 


DAY=`eval date +"%d"`
MONTH=`eval date +"%m"`
YEAR=`eval date +"%Y"`
HOUR=`eval date +"%H"`
MINUTE=`eval date +"%M"`


$COMMAND1 2>/dev/null

if [ $? -eq 0 ]
                echo "Command 1 was successful"
                echo "There ain't folders!!"
                echo "I'll mkdir some!"

                COMMAND2="mkdir -p $PIMPURL"
                $COMMAND2 2>/dev/null
if [ $? -eq 0 ]
                echo 'Command 1 or/and 2 was successful'
                echo "STARTING MAIL BACKUP"

                COMMAND3="tar -cvzf '"$PIMPURL"shisha_"$HOUR"_"$MINUTE"_.data.tar.gz' "$MAILURL
                echo $COMMAND3
                $COMMAND3 2>/dev/null

                if [ $? -eq 0 ]
                                echo 'MAIL BACKUP SUCCESSFULL'
                                echo "FAILURE!!"
                echo 'Nope! Must be some kind of strage Err0r!!'

So if I execute this script I get the following error:

Command 1 was successful
Command 1 or/and 2 was successful
tar -czvf '/mnt/alias/backup/2014/06/13/shisha_10_25_.data.tar.gz' /mnt/alias/storage/shishaMail
tar: Removing leading `/' from member names
tar (child): '/mnt/alias/backup/2014/06/13/shisha_10_25_.data.tar.gz': Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now

As you see there is an echo of COMMAND3 which would be:

tar -czvf '/mnt/alias/backup/2014/06/13/shisha_10_21_.data.tar.gz' /mnt/alias/storage/shishaMail

And if I execute this command by hand, as the same user I execute the script as (which would be root in both cases), it works.
I don't get why the script complains about a not existing file or directory as the directories exist except the *.tar.gz file as this has to be created by tar.

  • 2
    You say an the end “And if i execute this command by hand, as the same user i execute the script (which would be root in both cases) i get an error.” — are the last 4 words correct? I was expecting a contrast. Jun 13, 2014 at 8:52
  • And does /mnt/alias/backup/2014/06/13/ exist? Also, what Richard said. How does the command behave differently when run manually?
    – terdon
    Jun 13, 2014 at 8:56
  • @richard pardon me, when i copy the COMMAND3 echo and execute it manually, it works as assumed. @terdon yes i am sure /mnt/alias/backup/2014/06/13/ exists. In fact, my script checks if it can switch the the repository. If he cannot, it will try to create the folder by the mkdir -p command Jun 13, 2014 at 9:04

1 Answer 1


Try removing the single-quotes from the COMMAND3 creation line:

COMMAND3="tar -cvzf "$PIMPURL"shisha_"$HOUR"_"$MINUTE"_.data.tar.gz "$MAILURL

When you execute that line by hand, the shell removes the quotes before tar ever sees the arguments.

You're not inserting spaces in the filename, therefore quotes are not necessary. Actually, you could simplify that line some more:

COMMAND3="tar -cvzf ${PIMPURL}shisha_${HOUR}_${MINUTE}_.data.tar.gz ${MAILURL}"

The curly braces are to delimit the variable names, otherwise it'd try expanding 'PIMPURLshisha', probably not what you want. Never hurts to use them, as it makes variables stand out too, easier to pick out.

  • Thanks a bucket lornix! And i finally learned how to delimit variable names^^ Ahh, man i hate bash syntax but at least it a lot of fun. Jun 13, 2014 at 9:45
  • I learn something every day! Enjoy!
    – lornix
    Jun 13, 2014 at 9:48

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .