- 締切済み
ネット上にあるファイルの更新確認を行うには?
ネット上にある特定のファイル(bz2、gz)が更新されているかを定期的に確認したいと思っています。 ですがファイルのサイズがとても大きく、毎回ダウンロードして確認するのはとても出来る状況ではありませんでした。 もしサーバー等に負担を掛けず、ファイルが更新されているかを確認するための手法などがありましたら、お教え頂きたく思います。よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- notnot
- ベストアンサー率47% (4900/10358)
ネット上にあると言ってもそのファイルにどうやってアクセスするのか? (1) HTTPでアクセスできる場合 HTTPのHEADメソッドでタイムスタンプ等がわかります。 (2) ftpでアクセスできる場合 他の人が回答済み。 (3) NFSやCIFSでアクセスできる場合 ローカルにあるのと同じ方法で可能。
- tatsu99
- ベストアンサー率52% (391/751)
参考までにFTPでファイル情報を取得するスクリプトを書いてみました。 FTPでサーバーにログインし、lsコマンドを発行し、ファイル一覧を取得しています。 サーバからはファイルの一覧はテキスト形式で1行ごとに1ファイルの情報が 送られてきます。 そのため、1行からファイル名、ファイルサイズ、タイムスタンプを取り出す必要が あります。 IPアドレス、ディレクトリ名、ユーザーID、パスワード等は、ソースを意図的に変えています。 -------------------------------------------------- require 'net/ftp' addr='xxx.xxx.xxx.xxx' ftp = Net::FTP.open(addr) do |ftp| #サーバーにログインするためのメソッド ftp.login('user-id','password') #FTPサーバのディレクトリを目的の位置へ変更する ftp.chdir('/home/xxx/xxx') #lsコマンドと同じ lines = ftp.list() lines.each do |line| print line,"\n" end lines.each do |line| data = line.split(/\s+/) fname = data[8] fsize = data[4] ftime = data[5] + ' ' + data[6] + ' ' + data[7] printf("name=%-16s\tsize=%s\ttime=%s\n",fname,fsize,ftime) end end ------------------------------------------------------ 実行結果 ------------------------------------------------------ -rwxr-xr-x 1 500 500 4140 Feb 10 02:01 MyGrep.rb drwxr-xr-x 2 500 500 4096 Feb 11 14:52 backup -rwxr-xr-x 1 500 500 9218 Feb 10 02:00 repeat.rb -rwxr--r-- 1 500 500 2455 Feb 10 02:06 rgrep.rb -rwxr-xr-x 1 500 500 2251 Feb 10 02:00 sed_edit.rb -rwxr-xr-x 1 500 500 1411 Feb 10 02:01 usage.rb name=MyGrep.rb size=4140 time=Feb 10 02:01 name=backup size=4096 time=Feb 11 14:52 name=repeat.rb size=9218 time=Feb 10 02:00 name=rgrep.rb size=2455 time=Feb 10 02:06 name=sed_edit.rb size=2251 time=Feb 10 02:00 name=usage.rb size=1411 time=Feb 10 02:01
- tatsu99
- ベストアンサー率52% (391/751)
#1です。 >タイムスタンプなどは「File.mtime(fname)」で取得出来たと思うのですが、これはファイルをダウン>ロードせずに行えないと認識していますが、ウェブ上にあるファイルに対しても有効なのでしょうか? >もしくは、別の手法などがございますでしょうか? File.mtime(fname)は、ウェブ上にあるファイルに対しては使用できないと思います。 (やったことはありませんので断言できませんが・・・) ファイルをダウンロードしていると記述されていたので、FTPを使用していると理解しました。 FTPのコマンドでlsがありますので、それを発行すると、 ファイルの一覧およびファイルサイズおよびタイムスタンプが取得できます。 以下FTPでのlsコマンドの発行例です。 ftp> ls -l 200 PORT command successful. Consider using PASV. 150 Here comes the directory listing. -rw-rw-r-- 1 500 500 24 Feb 26 07:51 a drwxrwxr-x 5 500 500 4096 Feb 19 14:03 data drwxrwxr-x 2 500 500 4096 Jun 07 01:10 goo -rwxrw-rw- 1 500 500 9715 Feb 10 14:43 smb.conf drwxrwxr-x 5 500 500 4096 Feb 06 14:48 temp -rwxrwxr-x 1 500 500 72 Feb 26 08:08 test.sh
- tatsu99
- ベストアンサー率52% (391/751)
前回のファイルのタイムスタンプとファイルサイズを記憶しておき、今回と何れかが違っていたら、更新されたと判断する、というのはいかがでしょうか。
お礼
ご回答いただきありがとうございます! タイムスタンプなどは「File.mtime(fname)」で取得出来たと思うのですが、これはファイルをダウンロードせずに行えないと認識していますが、ウェブ上にあるファイルに対しても有効なのでしょうか? もしくは、別の手法などがございますでしょうか?