
データベースのバックアップをディレクトリ構造に保存します。
year/month/day/time/backup_name
例は次のとおりです。
basics_mini/2012/11/05/012232/RATIONAL.0.db2inst1.NODE0000.20110505004037.001 basics_mini/2012/11/06/012251/RATIONAL.0.db2inst1.000
バックアップファイルのタイムスタンプは使用できません。自動テストが開始される前のサーバー時間は、2011年5月5日に設定されます。
したがって、問題は「基本ディレクトリ」(基礎知識_ミニ)をコーディングしたい特定の機能に追加します。
最新のデータベースを復元する必要があります。私はこれをPHPにしていますが、単純なシェルスクリプトソリューションがあるかどうか疑問に思います。
答え1
あなたのニーズに合ったものを見つけてください:
find "/path/to/backup_dir" -type f|sort -r|head -n1
これは、月と日のフォルダに前にゼロがある場合にのみ機能します(例と同様)。
特定のファイル名(またはパターン)にバックアップするには、ルックアップパラメータに名前パターンを追加します。
find "/path/to/backup_dir" -type f -name "*db2inst1*"|sort -r|head -n1
...または-iname
大文字と小文字を区別しないモードの場合
次に、上記のコマンドを詳しく説明します。
find "/path"
追加のフィルタリングを使用しない限り、指定されたパス内のすべてのファイル/ディレクトリを繰り返し一覧表示します。- パラメータ検索は
-type f
すべての非正規ファイルをフィルタリングします。) -name
または、-iname
特定のパターンに基づいてファイルを一致させるsort
出力を逆順に並べ替え(-r
)head -n1
-n 1
入力()の最初の行だけを印刷し、印刷してすぐに終了します。
答え2
find 'basics_mini' -type f |
sed 's/.*basics_mini\///' |
sort -t '/' -k1nr -k2nr -k3nr -k4nr |
head -1
その後、バックアップディレクトリでファイルを見つけ、先行パスsed
(ディレクトリまでyear
)を削除します。次に、パス名を "/" で区切って、フィールド 1、2、3、4、つまり年、月、日、時間の数値ソートを実行します。最後に、head -1
出力の一番上の行が返されます。
もちろん、同じ最新の項目が複数ある場合でも、これは1つのファイルのみを返します(心配されている場合)。
答え3
この名前付けスキームを使用すると、最新のバックアップはアルファベット順に最後のサブディレクトリにあります。ワイルドカードがアルファベット順に拡張されることを利用して、シェルから直接最新のディレクトリをインポートできます。
cd basics_mini
set [0-9][0-9][0-9][0-9]/*/*/*
shift $(($#-1))
echo "The most recent backup is in $1"
zshでは、glob修飾子を使用して最後のディレクトリを直接インポートできます。
echo "The most recent backup is in" basics_mini/[0-9][0-9][0-9][0-9]/*/*/*([-1])
答え4
find -maxdepth 1 -type ['d' for directory or 'f'for file] | ls -t | head -1 ..
これはうまくいきます。