ファイル名の日付以降にファイルが変更されたかどうかをテストします。

ファイル名の日付以降にファイルが変更されたかどうかをテストします。

YYYYMMDD次のファイル名を持つファイルがあります。

file-name-20151002.txt

あることを確認したい。これ2015年10月2日以降のドキュメントが修正されました。

メモ:

  • 出力を見るとこれを行うことができますが、ls出力を解析するのはls悪い考えだと思います。
  • あえて検索する必要はないみんな特定の日付以降のファイルをテストしてみてください。一つ一度に 1 つのファイルを指定します。
  • ファイルが作成された翌日に変更されることを心配しません。つまり、20151002この名前のファイルが2015年10月3日以降に変更されたかどうかを知りたいだけです。
  • MacO 10.9.5を使用しています。

ベストアンサー1

次のスクリプトは、コマンドラインで指定されたすべてのファイルの日付を確認します。

GNUバージョンのseddateおよびstat

$ cat check-dates.sh 
#! /bin/bash

for f in "$@" ; do
  # get date portion of filename
  fdate=$(basename "$f" .txt | sed -re 's/^.*(2015)/\1/')

  # convert it to seconds since epoch + 1 day
  fsecs=$(echo $(date +%s -d "$fdate") + 86400 | bc )

  # get modified timestamp of file in secs since epoch
  ftimestamp=$(stat -c %Y "$f")

  [ "$ftimestamp" -gt "$fsecs" ] && echo "$f has been modified after $fdate"
done

$ ./check-dates.sh file-name-20151002.txt 
file-name-20151002.txt has been modified after 20151002
$ ls -l file-name-20151002.txt 
-rw-rw-r-- 1 cas cas 0 Oct 26 19:21 file-name-20151002.txt

これはテストされていないバージョンですが、オンラインのマニュアルページを正しく読むと、Mac(およびFreeBSDなど)で動作します。

#! /bin/bash

for f in "$@" ; do
  # get date portion of filename
  fdate=$(basename "$f" .txt | sed -e 's/^.*\(2015\)/\1/')

  # convert it to seconds since epoch + 1 day
  fsecs=$(echo $(date -j -f %Y%m%d "$fdate" +%s) + 86400 | bc )

  # get modified timestamp of file in secs since epoch
  ftimestamp=$(stat -f %m "$f")

  [ "$ftimestamp" -gt "$fsecs" ] && echo "$f has been modified after $fdate"
done

おすすめ記事