Perlのftpでサーバ上ファイルを新しければ上書きする方法を教えてください。

windows8PCにActivePerl5.18を入れてPerlのNet::FTPで、
PCのファイルが新しければサーバにUPする処理をしたいです。

$ftp->put(PCファイル名,サーバファイル名)
でUPは出来るのですが常に上書き転送になります。
PCファイルの日付の新しいファイルだけを上書きUPするには一発でいく
命令があるのか、それとも1つ1つ比較してUPするのでしょうか?

PCファイルはstatのlocaltimeで更新日時を取得出来ましたが
サーバー側のファイルでは
$ftp->dir;等で、ファイル一覧の取得しか自分は出来ませんでした。
「パーミション 所有者 サイズ 日時 ファイル名」等が列挙されるのですが
それを分解してファイル名と日時を取り出し、ローカルタイムスタンプと比較して
UPするといけるとは思うのですが、知らない為に面倒な事をしてる気がします。
スマートに更新日時が新しいファイルだけ転送する方法があれば教えてください。
FTPソフトを使う等ではなくperlのftpで行いたいです。
又はWindowsのバッチftpのほうが簡単に行えるならそちらでも良いです。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2015/04/20 08:38:35

ベストアンサー

id:cubick No.1

回答回数129ベストアンサー獲得回数39

Net::FTPのmdtmメソッドでリモートファイルの更新日時が取得できるようです。

$ftp->mdtm(FILE)

http://perldoc.jp/docs/modules/libnet-1.12/Net/FTP.pod

id:cafet

取得できました、助かりますありがとうございます!

2015/04/20 08:39:17

その他の回答0件)

id:cubick No.1

回答回数129ベストアンサー獲得回数39ここでベストアンサー

Net::FTPのmdtmメソッドでリモートファイルの更新日時が取得できるようです。

$ftp->mdtm(FILE)

http://perldoc.jp/docs/modules/libnet-1.12/Net/FTP.pod

id:cafet

取得できました、助かりますありがとうございます!

2015/04/20 08:39:17
id:cafet

質問者から

cafet2015/04/21 11:31:43

皆さんありがとうございます。mdtmでサーバー側タイムスタンプが取得出来ることがわかり、それをもとに比較してUPするようにします。mdtmというのを知らなかったので質問の仕方がよくなかったですが勉強になりました、ありがとうございます。

  • id:a-kuma3
    >それを分解してファイル名と日時を取り出し、ローカルタイムスタンプと比較して
    >UPするといけるとは思うのですが、知らない為に面倒な事をしてる気がします。
    「新しい場合のみ上書き」という機能がある ftp クライアントは、そのスマートではない処理をやってます。

    http://srgia.com/docs/rfc959j.html
    RFC959 の 4.1. FTP コマンドで決められたことしか ftp はできません。
    それ以上のことは、コマンドを組み合わせて実装します。
  • id:TransFreeBSD
    とはいえ、その面倒な事をするのは面倒なので、
    https://metacpan.org/pod/distribution/Net-FTP-Common/lib/Net/FTP/Common.pod
    https://metacpan.org/pod/Net::FTP::Find

    perl以外だとwindows標準のftpは面倒だった気がします。
    私はwinscp使ってます。
  • id:a-kuma3
    >perl以外だとwindows標準のftpは面倒だった気がします。
    LIST コマンドが返すフォーマットが決まってないから、という辺りですかね。
  • id:TransFreeBSD
    >>perl以外だとwindows標準のftpは面倒だった気がします。
    >LIST コマンドが返すフォーマットが決まってないから、という辺りですかね。
    バッチだと上書きするかしないかの2択で日時比較の機能がないので、標準入出力開いて制御してやらなきゃダメだったはず。
    なのでNet::FTP使うよりむしろ面倒だったと思う。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません