2011-01-23 6 views
21

find myfile.txt -mtime +5私のファイルが5日以上経過しているかどうかを確認することができることをよく知っています。しかし、私はmyfile.txtの日数でmtimeを取り出して、それを変数に格納してさらに使いたいと思っています。どうすればいい?bash - 特定のファイルのmtimeを取得しますか?

答えて

43

statはあなたにその情報を与えることができます:

filemtime=`stat -c %Y myfile.txt` 

%Yはあなたに「エポックからの秒」として最後の修正を与えるが、他の多くのオプションがあります。 more info。だから、ファイルはGMT 15:30 2011-01-22に変更された場合は、上記の編集 1295710237.

の領域で数を返します:それは修正されたのでああ、あなたは、日中の時間が欲しいです。これはもっと複雑になります。なぜなら、「日」は一定の期間ではないからです(一部の日は夏時間のおかげで23時間しかなく、他の人は25   —です)。

ナイーブバージョンは、次のようになります。

filemtime=`stat -c %Y $1` 
currtime=`date +%s` 
diff=$(((currtime - filemtime)/86400)) 
echo $diff 

...しかし、再び、それは日を想定していますことは、常に正確に86,400秒の長さです。

算術演算の詳細については、hereを参照してください。

+0

残念ながら私は自分自身の愚か者を作ったし、私は時代の時代が必要であることを忘れてしまった。それは可能ですか? – Industrial

+0

@Industrial:価値があれば、数学をすることができます。私はあなたが「...時代の時代」を意味する言葉に従わない。 (何日後から何日前に修正されたのか?) –

+0

日程についての部分を逃した+1 – Anders

2

これは私の答えですか?

A=$(stat -c "%y" myfile.txt) 

STAT-ヘルプをご覧

stat --help 
Usage: stat [OPTION]... FILE... 
Display file or file system status. 
[...] 
-c --format=FORMAT use the specified FORMAT instead of the default; 
         output a newline after each use of FORMAT 
[...] 
The valid format sequences for files 
[...] 
    %y Time of last modification, human-readable 
    %Y Time of last modification, seconds since Epoch 
[...] 
3
AGE=$(perl -e 'print -M $ARGV[0]' $file) 

Perlの-Mオペレータはあなたのための日にstatコールと変換を処理として、日中$ファイルの年齢に$のAGEを設定します。

戻り値は浮動小数点値です(例:6.62849537日)。あなたが整数の結果を持っている必要がある場合は、RubyやPythonの

AGE=$(perl -e 'print int -M $ARGV[0]' $file) 

式に intを追加し、ファイルをstatをし、いくつかのデータを返すために彼らのワンライナーを持っているが、私はPerlが最も簡潔な方法を持っていると信じています。

+0

これは受け入れられたよりも良い答えです! – Anne

関連する問題