![最新のバックアップファイルを取得する[冗長]](https://linux33.com/image/49309/%E6%9C%80%E6%96%B0%E3%81%AE%E3%83%90%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%5B%E5%86%97%E9%95%B7%5D.png)
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
ファイル名に改行文字が含まれていると、この方法は失敗します。