先月の月名が入ったファイルやディレクトリをlsする方法


いっつも忘れるのでメモ。dateコマンドの結果をプロセス置換してlsコマンドなどに食わせるとき、意図しない動作になることがある。例えば今日(今月)みたいな、31日まである日にdateコマンドの引数に --date=1 month ago をつけたところで

となってしまう。

lsコマンドの結果で

こう表示されて欲しいのだが、以下のように何も工夫しないと

こうなってしまう(そりゃそうだ)。正しく「前月」のファイル一覧を出したいなら

こうする。

dateコマンドのおさらい

いきなり応用例から書いてしまったが、dateコマンドに絞っておさらいしてみると、先ほどのlsコマンドの例から抜き出すとこうなる。

dateコマンドのフォーマット指定を削るとこうなる。

つまり、「今月1日を基準として、その1日前」を表示するようにすれば、自ずと前月が表示される。むかーし、6年ほど前に力技で前月の初日と末日なんてのを出していたが、残念ながら今回のような考慮はなされていなかった。。。当時参考にされた方がいらっしゃったらごめんなさい。

じゃあ前々月はどうやって出力する?

先に例示した「date -d 〜」を入れ子にしてあげればよい。

さらにその前月は・・・

だんだん入れ子が深くなると訳わかんなくなるので、任意の求めたい月があるなら別の手段を取ったほうがよさげ。