GNU/Linux >> Linux の 問題 >  >> Linux

Bashを使用して特定のファイルのmtimeを取得しますか?

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 では少し面倒なので、すべてのコーナー ケースで動作する相対時間が必要な場合は、別の言語を使用する方がよい場合があります。


Linux
  1. Bash を使用してファイルを検索してコピーする

  2. Python FTPは日付で最新のファイルを取得します

  3. Bash/Debianでファイル作成日時を取得するには?

  1. Bash での日付比較

  2. bash を使用して Linux でサブネット マスクを取得する

  3. Linux Bash Shell - 特定の範囲をグロビングするファイル?

  1. BashスクリプトでのLinuxBasenameコマンドの使用

  2. Cを使用して特定のメモリアドレスを取得する方法

  3. sed を使用して特定のパターンを置き換える