YYYYMMDD
次のファイル名を持つファイルがあります。
file-name-20151002.txt
あることを確認したい。これ2015年10月2日以降のドキュメントが修正されました。
メモ:
- 出力を見るとこれを行うことができますが、
ls
出力を解析するのはls
悪い考えだと思います。 - あえて検索する必要はないみんな特定の日付以降のファイルをテストしてみてください。一つ一度に 1 つのファイルを指定します。
- ファイルが作成された翌日に変更されることを心配しません。つまり、
20151002
この名前のファイルが2015年10月3日以降に変更されたかどうかを知りたいだけです。 - MacO 10.9.5を使用しています。
ベストアンサー1
次のスクリプトは、コマンドラインで指定されたすべてのファイルの日付を確認します。
GNUバージョンのsed
、date
および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