linuxコマンドで最新日付のファイルのみを出力する。

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)

awkコマンドの基本 – Qiita

【 grep 】コマンド(応用編その2)――複数の文字列を検索する:Linux基本コマンドTips(11) – @IT (itmedia.co.jp)

Follow me!

DMP構築のご相談

お気軽にお問い合わせください

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です