Prevent security-query in bacula scripting

457 views Asked by At

I'm trying to script bacula to delete old files that are not used any more. While there are over 1000 old files im not willing to do it manualy.

How far I've come

for filename in $(echo "list volume" |bconsole |grep Purged |awk -F\| '{print $3}')
do 
    echo "delete volume=2012-10-19_23h40m" | bconsole
done

But now I have the problem of the security question where someone have to enter "yes"/"no".

Are you sure you want to delete Volume "2012-10-19_23h40m"? (yes/no)

But the bconsole program is just exiting!

Any ideas?

2

There are 2 answers

0
mr.moe On BEST ANSWER

@brain thanks for the input but I like one liner :D

what is nearly a one-liner and works like charm

for filename in $(echo "list volume" |bconsole |grep 2012-08 |awk -F\| '{print $3}'); do bconsole << EOF; rm /media/storage/$filename; done
delete volume=$filename
yes
quit
EOF

so you can skript everything with an interactive programm :D

0
Brian Gerard On

Maybe throw a little expect(1) into the mix?

bash$ cat delete_volume
#!/usr/bin/expect

# Start up bconsole
spawn bconsole

# Grab the command from STDIN
expect_user -re "(.*)\n"

# Send it to bconsole
send "$expect_out(1,string)\n"

# Handle the Q&A
expect "Are you sure" { send "yes\n" }

# Let bconsole do its work
interact

So your loop would look like this (I'm assuming the 2012-10... part will eventually be replaced by what you found in the pipeline, but without knowing how that would work, I'm just using what you've got in the question)...

for filename in (...your file finding pipeline...)
do
    echo "delete volume=2012-10-19_23h40m" | ./delete_volume
done

Usual caveats apply. I am by no means an expect expert, so testing this before going live is highly recommended. :-)