web-dev-qa-db-ja.com

BASHを使用してUnixタイムスタンプを検証する

私のグーグルフーは私に失敗したので、ここの誰かが私を正しい方向に向けることができることを願っています。私はいくつかのデータ検証作業を行っている最中であり、システムがUNIXエポック形式(エポックからの秒数)でいくつかの無効な日付を記録していると思われます。 1357853083(unixエポックからの秒数)のようなデータが有効なunixタイムスタンプであるかどうかを確認するために、bashに簡単な方法はありますか?理想的には、人間が読める形式の日付に変換できないタイムスタンプと、現在の日付よりも大きい将来の日付にレンダリングされる可能性のあるタイムスタンプを探しています。

物事を人間が読める形式の日付に変換するこの怪物を編集しましたが、無効な日付を見つける方法がわかりません。

$ grep "delimiter" * | grep -v "delimiter2" | awk -F"," '{print $2}' | awk -F":" '{print $2}' | awk -F"*" '{print $1}' | awk '{printf("%s", strftime("%Y.%m.%d ",$1)); printf("%s", strftime("%H:%M:%S \n",$1))}' | sort -V
1
FloppyDisk

したがって、2つのテストを実行したいようです。

  1. システムが時間に32ビットまたは64ビットを使用しているかどうかに応じて、-2147483648から2147483647または+ -9.22337203685478E18の有効なエポック時間番号を確認します。
  2. 今日の日付よりも小さい番号を確認したいとします。

したがって、2つのテストを組み合わせると、-2147483648から今日のエポック時間の日付までの範囲の数値を探します。以下のコードはあなたが望むことをするはずですが、私は下限を、コンピューターがインストールされた日付やOSがコンパイルされた日付など、妥当なエポックの日付に引き上げます。下限を任意に0秒または1970年1月1日に設定しました。

#$i stores the value being tested
#returns failed if it fails validation, otherwise it returns passed
if [ $i -le 0 -o $i -gt `date +%s` ]; then echo "failed"; else echo "passed"; fi;
3