1

我正在尝试编写 bacula 脚本以删除不再使用的旧文件。虽然有超过 1000 个旧文件,但我不愿意手动进行。

我已经走了多远

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

但是现在我遇到了安全问题的问题,有人必须输入“是”/“否”。

您确定要删除卷“2012-10-19_23h40m”吗?(是/否)

但是 bconsole 程序刚刚退出!

有任何想法吗?

4

2 回答 2

1

也许expect(1)混入一点?

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

所以你的循环看起来像这样(我假设 2012-10... 部分最终将被你在管道中找到的内容所取代,但不知道它是如何工作的,我只是在使用你所拥有的在问题中)...

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

通常的警告适用。我绝不是期望专家,因此强烈建议在上线之前进行测试。:-)

于 2012-10-23T20:00:19.657 回答
1

@brain 感谢您的输入,但我喜欢一个班轮:D

几乎是一条线,像魅力一样工作

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

因此您可以使用交互式程序编写所有内容:D

于 2012-10-29T12:56:51.933 回答