†REXXのどろぬま†

NcFtpPutを使用した更新アップロード

作成開始日 2025.05.05
最終更新日

アップロードしたいファイルのあるローカルのディレクトリに、直近の更新日時のデータを置き、それ以降のタイムスタンプのファイルを選び出してアップロードする。ポイントは、ftpサーバ上のファイルのタイムスタンプと比較している訳ではない点。このため、処理がかなり簡便になる。

なお、この例では、カレントディレクトリにあるhtm/htmlファイルの更新をチェックしている(サブディレクトリは対象外)。そして、ftpサーバ上の「/html」にある《カレントディレクトリと同名のディレクトリ》にファイルをアップしている。

たとえば、ローカルのファイルが「E:\MyHomepage\diary」にあれば、更新ファイルはftpサーバ上の「/htm/diary」にアップロードされる。アップロード先は変数dnameで設定しているので、必要に応じて書き換える。同様に、アップロードするファイルの拡張子は変数maskで変更可能。

/****************************************************************************/
/* fud.cmd : ftp update uploader 2025.05.08  */
/* htm/htmlファイル限定 maskの設定で変更可能 */
/* STREAM query datetime版 秒単位まで判断    */
/****************************************************************************/
Call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
Call SysLoadFuncs

/*** 初期設定 ***/
/*プログラムのパスとユーザー名、パスワードはそれぞれの環境合わせて設定する*/
ncftp = 'C:\.....\ncftpput -u username -p password'
/*同様に接続するサーバ名も各自の環境に合わせて設定する*/
srv   = 'host.name.ne.jp'
/*アップロード先のディレクトリ:以下の例は/htmlの下のローカルと同名のディレクトリ*/
dname = '/html/'||filespec('N',DIRECTORY())	/* カレント・ディレクトリ */
updat = DIRECTORY()'\@update.dat'		/* 更新日付データ */
mask  = '*.htm?'				/* htm/html対応 */

/*** 更新日付のデータがない場合の処理:現在日時で仮作成 ***/
IF STREAM(updat,'C','query exist')='' THEN
Do
  SAY '*** no update data file'
  SAY '*** save current date&time'
  SAY '*** edit :' updat
  '@ECHO' date('Ordered') time('Normal')'>' updat
  EXIT
End

/*** 更新日時データの読み込み ***/
rc=STREAM(updat,'C','O')
last_dt=LINEIN(updat)
rc=STREAM(updat,'C','C')
SAY last_dt '[last update]'
SAY '-------------------------------'

/*** メインルーチン ***/
rc=SysFileTree(mask,'file','FO')
files=''
Do n=1 to file.0
  dt=STREAM(file.n,'C','query datetime')
  PARSE VAR dt mm '-' dd '-' yy tm dmy		/* dmyはバグ対策:必須 */
  dt=yy'/'mm'/'dd tm

  IF dt>last_dt THEN
  Do
    SAY dt FILESPEC('N',file.n)
    files=files' 'file.n
  End
End

IF files='' THEN DO; SAY '*** no upload files ***'; EXIT; END;

SAY '*** upload ok ? ***'
PULL st
IF st='N' THEN EXIT	/* PULLの入力は大文字化される */

/* アップロードの実行 */
ncftp srv dname files

/*更新日時の書き込み*/
'@echo' date('Ordered') time('Normal')'>' updat
EXIT


【REXXのどろぬま目次】 【ホーム】