背景
アプリケーションの検証のために「データベースサーバから、ダンプファイルを持ってきたい」というのはよくある話だと思います。その時に、毎回 ssh
でログインしてファイルの場所を確かめて、scp
でコピーする、という手順を踏んでいたんですが、これが結構面倒くさいので、もうちょっと早くしてみようと思いました。
前提
ホスト名 dbserver
のディレクトリ /backup/db_bkup/daily/
にて、毎日データベースをダンプしています。ダンプファイルの名前には、タイムスタンプがついていて database_20141201.dump.gz
みたいな形式になっています。直近の一週間、七個のファイルが常に配置されています。
結論
上の前提のとき、下のコマンドを叩けばホームディレクトリに最新のダンプファイルが取れます。
scp dbserver:`ssh dbserver "ls /backup/db_bkup/daily/database* | tail -n1"` ~/
解説
最初は下のようなシェルスクリプトを書きました。これを混ぜてみたら上のができました。
# 一番新しいファイルの絶対パスを得るコマンドを作成
# (場合によっては ls のオプションでソートする必要があります)
CMD="ls /backup/db_bkup/daily/kit_database* | tail -n1"
# 上のコマンドを dbserver で実行して、結果を代入
FILE_PATH=`ssh dbserver $CMD`
# scp でファイルを取ってくる
scp dbserver:$FILE_PATH ~/