stat
その情報を提供できます:
filemtime=$(stat -c %Y myfile.txt)
%Y
最後の変更を「エポックからの秒数」として表示しますが、他にも多くのオプションがあります。より詳しい情報。したがって、ファイルが 2011 年 1 月 22 日の 15:30 GMT に変更された場合、上記は 1295710237 の範囲の数値を返します。
編集 :ああ、変更されてからの日数が必要ですね。特に「日」は一定の期間ではないため、これはさらに複雑になります (23 時間しかない「日」もあれば、夏時間のおかげで 25 時間しかない「日」もあります)。
ナイーブ バージョンは次のようになります:
filemtime=$(stat -c %Y "$1")
currtime=$(date +%s)
diff=$(( (currtime - filemtime) / 86400 ))
echo $diff
...しかし、これは 1 日が常に正確に 86,400 秒であると仮定した場合です。
bash での算術演算について詳しくは、こちらをご覧ください。
AGE=$(perl -e 'print -M $ARGV[0]' $file)
Perl の -M
のように、$AGE を $file の経過日数に設定します。 演算子は stat
を処理します 通話と日数への換算。
戻り値は浮動小数点値です (例:6.62849537 日)。 int
を追加 整数の結果が必要な場合は式に
AGE=$(perl -e 'print int -M $ARGV[0]' $file)
Ruby と Python にも、ファイルを統計してデータを返すワンライナーがありますが、Perl が最も簡潔な方法だと思います。
date ユーティリティには、ファイルから mtime を抽出するための便利なスイッチがあり、フォーマット文字列を使用して表示または保存できます。
date -r file "+%F"
# 2021-01-12
file_mtime=$(date -r file "+%F")
man date
を参照 、date の出力は "+"
で始まるフォーマット文字列によって制御されます
多くの日付を比較するのに役立つフォーマット文字列には、次のものがあります:
"+%j": day of year
"+%s": unix epoch time
日付の算術演算は bash では少し面倒なので、すべてのコーナー ケースで動作する相対時間が必要な場合は、別の言語を使用する方がよい場合があります。