-PR-
解決済み

最新の更新日時を取得したい

  • 困ってます
  • 質問No.461143
  • 閲覧数891
  • ありがとう数4
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 63% (35/55)

RedHatLinux7.0です。シェル(bash)からサブディレクトリを含め最新の更新ファイルのファイル名とパスとその日時を得たいのですがその方法がわかりません。たとえば、、

ls -Rlt /home/dareka/public_html

とするとサブディレクトリ毎に新しい順に並べてくれるのですが、欲しいのはこれらのファイルのうち最新のファイル名を一つだけとその日時とパスを知りたいのです。このような結果を得るコマンドはありますか?
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.3
レベル14

ベストアンサー率 42% (1231/2878)

基本的なUNIXコマンドだけだと、ちょっと思い付かなかったので、直接更新時刻を得るプログラムをCで書いてみました。

#include <stdio.h>
#include <string.h>
#include <sys/param.h>
#include <sys/types.h>
#include <sys/stat.h>

char FPath[ MAXPATHLEN + 1 ];
struct stat FileInfo;

int main (int argc, const char * argv[]) {
while ( fgets( FPath, sizeof FPath, stdin ) ){
FPath[ sizeof FPath - 1 ] = '\n';
*strchr( FPath, '\n' ) = '\0';
if ( lstat( FPath, &FileInfo ) ){ continue; }
printf( "%10d %s\n", FileInfo.st_mtime, FPath );
}
}

これをビルドしたものを、a.outとすると、こんな感じで使えます:

[localhost:~/test] osamuy% find . -type f | a.out | sort -r
1044149908 ./a.out
1044149906 ./main.c
1044145197 ./test.pbproj/project.pbxproj
(以下略)

FreeBSDとMac OS Xで試してますが、標準的な関数しか使ってないので、Linuxでも使えると思います。
Perlが使えるならfind2perlが入っているはずですので、そちらを使えば、てっとりばやく実現できます。

[localhost:~/test] osamuy% find2perl . -type f -eval 'printf "%10d %s\n", (lstat(_))[9], $name' | perl | sort -r
1044149908 ./a.out
1044149906 ./main.c
1044145197 ./test.pbproj/project.pbxproj

っていうか、こっちを試してから、Cで書いてみたという。
find2perlについては、manpageをご覧下さい。
time_tが時刻書式じゃないとイヤな場合は、localtimeやstrftimeのmanpageをご覧下さい。
お礼コメント
hellobell

お礼率 63% (35/55)

回答ありがとうございます。お礼が遅くなって申し訳ありません。

以下のようにしていまくいきました。
find2perl /home/dareka/public_html -type f -eval 'printf "%10d,%s\n", (lstat(_))[9], $name'|perl|sort -r|head -1

このあと秒数を変換して目的の通りになりました。ありがとうございました。
投稿日時 - 2003-02-05 22:54:30

その他の回答 (全3件)

  • 回答No.1
レベル14

ベストアンサー率 63% (1021/1612)

findコマンドを利用してみてはどうでしょう。
man findで使い方を調べてみてください。

find /home/dareka/public_html -mtime 1 -exec ls -la {} \;
お礼コメント
hellobell

お礼率 63% (35/55)

回答ありがとうございます。

-mtime 1
これは最後に更新して1日以内のファイルを探すということかと思いますが、これでは2日以上前に更新されたファイルが最新の場合は見つけられません。
投稿日時 - 2003-02-01 20:06:16


  • 回答No.2
レベル14

ベストアンサー率 63% (1021/1612)

(補足)
最新のファイル名、という条件が必要なら、日付でソートされたファイル一覧の1行目だけをheadコマンドで
取り出せます。
お礼コメント
hellobell

お礼率 63% (35/55)

-Rオプションが付くと、サブディレクトリをまたがって-tオプションのソートが有効にならないようです。したがってサブディレクトリを含めpublic_html以下すべてのファイルの中で最新のファイルを一個だけ取得できません。

シェルからは無理なんでしょうか?
投稿日時 - 2003-02-01 20:19:24
  • 回答No.4
レベル14

ベストアンサー率 63% (1021/1612)

>ls -Rlt /home/dareka/public_html

一日たって思いついたのですが、ホームページコンテンツの
不正改竄チェック等を考えておられるのでしょうか?

うちのサーバではtripwireをcronで毎日走らせて、改竄チェック
をしています。

ホームページコンテンツのあるディレクトリを指定して、

日付が変わったファイル
サイズが変わったファイル
新しく追加されたファイル
削除されたファイル

などがあれば報告してくれます。

ご参考まで。
お礼コメント
hellobell

お礼率 63% (35/55)

回答ありがとうごさいます。お礼が遅くなって申し訳ありません。

サーバを複数のユーザに利用していただいているのですが、目的はそのユーザがデータを更新しているかどうかをチェックするためです。知りたいのは変更があったことではなく、変更されなくなってからどれくらい経過したかです。
投稿日時 - 2003-02-05 23:15:34
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
このQ&Aにこう思った!同じようなことあった!感想や体験を書こう
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-

特集


開業・独立という夢を持つ人へ向けた情報満載!

ピックアップ

ページ先頭へ