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

@brain 入力していただきありがとうございますが、1 つのライナーが好きです :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 に答える
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 に答える