我正在尝试编写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程序刚刚退出!
有什么想法吗?
答案 0 :(得分: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
通常的警告适用。我绝不是期望专家,因此强烈建议您在上线前进行测试。 : - )
答案 1 :(得分: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