web-dev-qa-db-ja.com

ファイルがx回以上前に作成されたかどうかをbashでチェックするにはどうすればよいですか?

ファイルがx回以上前に作成されたかどうかをlinux bashでチェックしたい。

ファイルの名前がtext.txtで、時間が2時間だとします。

 if [ what? ]
 then
     echo "old enough"
 fi
90
flybywire

変更時のみ

if test `find "text.txt" -mmin +120`
then
    echo old enough
fi

または、1行で同じ:

#!/bin/bash
find text.txt -mmin +120 -exec echo "old enough" \;

変更には-cminを、アクセス時間には-aminを使用できます。他の人が指摘したように、作成時間を追跡できるとは思わない。

120
kmkaplan

私はいつもdate -r /the/file +%s年齢を確認します。

touch --date '2015-10-10 9:55' /tmp/file任意の日付/時刻に非常にきめ細かい時間を取得します。

39
nemik

statを使用してファイルの最終変更日を把握し、dateを使用して現在の時間とbashismの自由な使用を把握し、ファイルに基づいて必要なテストを実行できます。最終変更時間1

if [ "$(( $(date +"%s") - $(stat -c "%Y" $somefile) ))" -gt "7200" ]; then
   echo "$somefile is older then 2 hours"
fi

コードはfindアプローチよりも少し読みにくくなりますが、findを実行して既に「見つけた」ファイルを見るよりも良いアプローチだと思います。また、日付の操作は楽しいです;-)


  1. Philが正しく述べたように、作成時間は記録されませんが、%Z の代わりに %Y以下の「変更時間」を取得します。

[更新]

Macユーザーの場合は、stat -f "%m" $somefile上記のLinux固有の構文の代わりに

20
Guss

作成時間は保存されません。

格納されるのは3つのタイムスタンプです(通常、特定のファイルシステムで、または特定のファイルシステムオプションでオフにできます)。

  • 最終アクセス時間
  • 最終変更時刻
  • 最終変更時間

ファイルへの「変更」は、アクセス許可の変更、名前の変更などとしてカウントされます。変更はコンテンツのみです。

16
Philip Reynolds

Ctimeは技術的にの作成時間ではありませんが、非常に頻繁に作成されます。

Ctimeはファイルの内容を変更しても影響を受けないため、通常はファイルが作成されたときにのみ更新されます。そして、はい-私はあなたのすべての叫び声を聞くことができます-アクセス許可または所有権を変更した場合も更新されます...しかし、一般的にそれは一度、通常はそこにファイルを置くと同時に行われるものです。

個人的に私は常にすべてにmtimeを使用しており、それがあなたが望むものだと思います。しかし、とにかく...ここに、使いやすい関数でのGussの「魅力的でない」bashの再ハッシュがあります。

#!/ bin/bash 
 function age(){
 local filename = $ 1 
 local changed = `stat -c%Y" $ filename "` 
 local now = `date +%s` 
 locallapse 
 
 let 
 
 file = "/" 
 echo $ fileの経過時間は$(age "$ file")秒です。
13
Maryam Jeddian

見つけるのは良いことですが、特にファイルを何秒古くする必要がある場合は別の方法を使用できると思います

date -d "now - $( stat -c "%Y" $filename ) seconds" +%s

GNU dateを使用

6
Vide

ツール 'stat'の結果を考慮してください。

  File: `infolog.txt'
  Size: 694         Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d  Inode: 11635578    Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/     fdr)   Gid: ( 1000/     fdr)
Access: 2009-01-01 22:04:15.000000000 -0800
Modify: 2009-01-01 22:05:05.000000000 -0800
Change: 2009-01-01 22:05:05.000000000 -0800

ここで、アクセス/変更/変更の3つの日付を確認できます。作成日はありません。ファイルの内容が変更されたとき(「変更」フィールド)またはそのiノードが変更されたとき(「変更」フィールド)だけを確認できます。

両方のフィールドが更新されるときの例:

誰かが追加情報をファイルの末尾に連結すると、「変更」が更新されます。

「変更」は、誰かがchmodを介して許可を変更した場合に更新されます。

3
fdr