背景: ここでは、テープ ライブラリとバックアップ ソフトウェア NetWorker を使用してデータをバックアップしています。インストールされているクライアントはかなり基本的なものであり、複数のターゲット ディレクトリを復元する必要がある場合は、次の行の X を含むスクリプトを介してバックグラウンドで X クライアント インスタンスを呼び出すだけのスクリプトを作成します。
recover -c client-srv -t "Mon Dec 10 08:00:00" -s barckup-srv -d /dest/dir/ -f -a /src/dir &
問題は、同じマシンから同時にバックアップされた異なるパーティション/ディレクトリが複数の異なるテープに分散している可能性があり、それらのテープの一部がバックアップと復元の間にライブラリから削除されている可能性があることです。
最近まで、ここにいる人々がどのテープが必要かを知る唯一の方法は、ライブラリが特定のテープを持っていないと文句を言うのを待つか、古いデスクトップ GUI で偽の復元をセットアップすることでした。クライアントと特定のメニュー オプションをヒットします。最初のオプションは、テープがオフサイトにあり、元に戻すのに 1 日かかることが判明した場合は非常に悪く、2 番目のオプションは面倒で時間がかかります。
実際の質問: 上記のコマンドで既に作成したスクリプトを読み取り、それを対話型 CLI クライアントにフィードし、必要なテープを吐き出す「メタ」スクリプトを作成しました。実は図書館にいます。これを行うために、スクリプトは次の正規表現を使用して必要な情報を引き出します。
# pull out a list of the -a targets
restore_targets="`sed 's/^.* -a \([^ ]*\) .*$/\1/' $rec_script`"
# pull out a list of -c clients
restore_clients="`sed 's/^.* -c \([^ ]*\) .*$/\1/' $rec_script`"
numclients=`echo $restore_clients | uniq | wc -l`
# pull out a list of -t dates
restore_dates="`sed 's/^.* -t \"\([^\"]*\)\" .*$/\1/' $rec_script`"
numdates=`echo $restore_dates | uniq | wc -l`
名前を覚えていないほど、正規表現の種類の使用にあまり慣れてs/\(x\)/\1/
いませんが、これは私がやっていることを達成するための最良の方法ですか? コマンドは機能.*
しますが、不必要に使用しているのではないかと思っています。