年/月/日/時間 ディレクトリ構造から最新のファイルをインポートします。

年/月/日/時間 ディレクトリ構造から最新のファイルをインポートします。

データベースのバックアップをディレクトリ構造に保存します。

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 .. 

これはうまくいきます。

関連情報