7/7更新
目的
linuxコマンドで上のような画像ファイルを最新日のファイルのみを全て出力する。
今回は例として画像がたくさん入っている自分のファイルを使いますが、この方法は.csvをはじめどんな演算子でも適応可能です。
背景
awsからデータを取得し、それをbqに追加する流れを自動化する業務に携わりました。
もしbqに追加するときにすべてのファイルを出力しなければ重複データを追加してしまいます。
最新日付のみをbqに格納することで重複データによるサーバーの無駄な容量増を予防することができます。
流れ
$ MONTH=(`ls -lrt | tail -n 1 |awk '{print $6}'`)
$ DATE=(`ls -lrt |tail -n 1 |awk '{print $7}'`)
$ ls -lrt |grep -E "${MONTH} ${DATE}"|awk '{print $9}'
解説
ls -lrt: 全てのファイルを作成順に詳細情報を含めて表示。
tail -n [数字]: ファイルを一番下から[数字]個表示。
awk ‘{print $[数字]}’:[数字]番目の要素を表示。
つまり,
MONTH=(`ls -lrt | tail -n 1 |awk '{print $6}'`)
ls -lrtの6番目の要素は月情報なので
ファイルを時間順に並べて一番下のファイルの月情報を取得という意味。
同様に,
DATE=(ls -lrt |tail -n 1 |awk '{print $7}')
はファイルを時間順に並べて一番下のファイルの日時情報を取得という意味。
grep -E “{変数}”:[変数]が入っているディレクトリのみを表示。
ls -lrt |grep -E "${MONTH} ${DATE}"
つまりこの場合${MONTH}=Jul、${DATE}=4なので
“Jul 4″が入っているファイルを表示することになる。
最後に
今回は最新日付のファイルのみを出力することができました。
実際の業務では任意のファイル名のなかで最新日付を出力したりしました。
参考資料
【 ls 】コマンド(並べ替え編)――表示結果を並べ替える:Linux基本コマンドTips(29) – @IT (itmedia.co.jp)
【 grep 】コマンド(応用編その2)――複数の文字列を検索する:Linux基本コマンドTips(11) – @IT (itmedia.co.jp)
DMP構築のご相談
お気軽にお問い合わせください