最新のバックアップファイルを取得する[冗長]

最新のバックアップファイルを取得する[冗長]

Googleでこのコンテンツを検索しましたが、用語が一般的で誤検出が多すぎるため、ここで質問します。簡単な答えがあると確信していますが、私は通常* nixでスクリプトを作成しません。

テスト環境用のデータベース更新スクリプトを作成しようとしています。たとえば、バックアップはsmbfs共有からマウントされますが、/data/backups/prodサブフォルダは少しトリッキーです。myproddbserver/yyyymmdd以下にファイルがたくさんあるようです。

restore最近、ディレクトリからyyyymmdd既知の名前のファイルを収集するコマンドを実行したいと思います。たとえば、次のような場合があります。

myproddbserver/20130630/foo.bak
myproddbserver/20130630/bar.bak
myproddbserver/20130731/foo.bak
myproddbserver/20130731/bar.bak

myproddbserver/20130731/foo.bakとを復元したいと思いますmyproddbserver/20130731/bar.bak

これらのパスを確実に取得するにはどうすればよいですか?

ベストアンサー1

yyyymmdd形式を使用しているため、数値の並べ替えが正しく機能します。最速の方法は、sort次のコマンドを使用することです。

newest_dir=$(printf '%s\n' myproddbserver/* | sort -rn | head -n1)

純粋なbashでもこれを行うことができます。

newest=0
for d in myproddbserver/*; do
    (( d > newest )) && newest=$d
done

newest_files=("myproddbserver/$newest/"*)
printf '%s\n' "${newest_files[@]}"

Bashのバージョンは遅いかもしれませんが、すべての可能なファイル名を処理します。sortファイル名に改行文字が含まれていると、この方法は失敗します。

おすすめ記事