dc:date をどうしたものか
2005-01-04
この日記の RSS は rNote が自動的に生成してくれているわけですが、このときの dc:date は、記事を書く xml ファイルの Date 要素から生成されます。今までは、記事の更新された時間のことなど考えていなかったので、<Date>2005-01-04</Date> って感じで書いていました。そのために生成された RSS では、<dc:date>2005-01-04T00:00:00+09:00</dc:date> といった感じですべて0時0分0秒の更新ということになっていたようです。と、さきほど親分(誰)に指摘していただいて気が付いたわけですが、これはまずいですね。
とりあえず、RSS を生成するスキンをいじって、yyyy-mm-dd の形で出すことにしておきましょう。しかし、過去の分はともかく今後は時間も入れたいなぁ。ファイルを作った時間を入れるのは容易なんですが、更新時の時間をどうやったら楽に入れられるかなぁ。ちょっと無い知恵を振り絞ってみるか。
と、スキンをいじって再構築(何)をする口実のための記事だったり。:p)
どうやったらローカルで日記を書いてサーバにアップしたりダウンしたりが便利になるかというのが、今回の指令です(何)。と、気張っていたんですが、実は WinSCP だけで用は足りました。WinSCP とはなんぞやというのは書くのが面倒なので、WinSCP Japanese site : about をご覧ください。で、WinSCP はしばらく前から使っていたんですが、今日始めてコマンドラインでも使えるということに気が付きました。
コマンドプロンプトを開いて、winscp3 /help などと打ち込めば使い方が表示されます。
winscp3.exe <session> /script=hoge
というのが書式です。<session> というのは、WinSCP でログインするときのアレ(どれ)ですね。で、WinSCP で接続した後に行う手順を script で指定したファイルに記述しておきます。WinSCP で使えるコマンドは、起動した後にコンソールで help などとすると一覧で表示されます。
さらに詳しいヘルプが必要な場合は、help sychronize のように知りたいコマンドを help コマンドの引数にしてやれば表示されます。
これを使って、日記を更新する場所から、ローカルとリモートのファイルを同期させてから、rNote の記事作成用の何か で書いたスクリプトを走らせると、自動的にその日の書くべきファイル名で、指定したエディタ = xyzzy が立ち上がり該当ファイルを作ってくれます。ただ、ファイルを開くだけでは不便なので、template-insert.l を使って、rNote の xml 用のテンプレートを挿入します。これを使うと xyzzy で開くモードや文字コードも指定できるので便利です。
一応、日記書きの際に起動する diary.bat を書いておきましょう。
@echo off
d:
cd d:\web\noasobi\diary\entries\2005\
winscp3 セッション名 /script=d:\web\noasobi\diary\scp\scpdown.scr
php -q d:\web\noasobi\diary\scp\diary.php
call d:\web\noasobi\diary\scp\open.bat
ローカルで、鯖に上がっている日記を落としてくるディレクトリに移動しておいて、WinSCP で鯖からダウンして、diary.php で日記のファイル名やディレクトリを生成して、そのファイルを開く、バッチファイル(この場合、open.bat)を生成、最後にバッチファイルを実行という手順です。その後さらに、template-insert.l が起動してテンプレートが挿入されるわけですけども。
WinSCP に実行させる、ダウンロード用のスクリプトファイル(この場合、scpdown.scp)は以下のような感じ。
cd public_html/diary.noasobi.net/entries/2005
synchronize local
exit
で、日記を書き終わったらまた同じように、WinSCP を使ってリモートのファイルをローカルのファイルに同期させます。ちなみにそれを行うための、rnote.bat の内容は以下のような感じ。最後に start コマンドを使って、rnoteadmin ツールにアクセスしています。
@echo off
d:
cd d:\web\noasobi\diary\entries\2005\
winscp3 セッション名 /script=d:\web\noasobi\diary\scp\scpup.scr
start http://diary.noasobi.net/rnoteadmin.php
で、そのときに使う scpup.scr の内容が以下のような感じ。
cd public_html/diary.noasobi.net/entries/2005
synchronize remote
cd ../../img
lcd d:\web\noasobi\diary\img
synchronize remote
exit
こっちは画像ファイルの更新も行っています。
長々と書いて、かなり意味不明ぽいですが、WinSCP を使えば、バッチファイルふたつくらい書くだけで、ローカルとリモートのファイルの同期が取れて便利だなぁ、というようなことでした。
- 追記
- 私は、PuTTY Download Page にある、pageant.exe などを使うことで、パスフレーズの入力を省略しています。
この記事へのツッコミ
- 1: あや (2005-02-20T11:36:36+09:00)
- はじめまして!
こちらのページを見てにWindows間のファイル同期のバッチファイルを書きました。
とても参考になりました。
私の場合、パッチファイルに引数を渡して実行しようとしています。
そこで、ご存知でしたらご教示願いたいのですが、
バッチファイル中のスクリプト(この場合でしたらscpup.scr)にも引数を引きつがせることは可能なのでしょうか?
winscp3でスクリプトへ引数を受け渡すオプション(?)などはあるのでしょうか?
ご存知でしたらお助けください・・。
- 2: のり (2005-02-21T23:25:41+09:00) nori@noasobi.net
- こんにちは。
えーと、よくわかっていないのですが、バッチファイルに引数を渡すと言うのは、
winscp3 <session> %1
みたいなことでしょうか? そう意味だとすると上記内容を、例えば test.bat とした場合、
test.bat /script=d:\hoge\hoge
などとして実行するとうまくいきませんね。
試しに、
test.bat "/script=d:\hoge\hoge"
のように、ダブルクォートで括ってみたところうまくいくようです。
もし話しが違っていたらごめんなさい。
- 3: あや (2005-02-24T23:54:29+09:00)
- のりさん、ありがとうございます!
説明不足ですみません。
具体的な例を申し上げますと
-------------syncweb.bat
@echo off
cd C:\web\%1
winscp3 scp://webserver /script=c:\hoge\hoge\scpup.scr
-----------------------
------------------scp.scr
cd c:\inetpub\%1
synchronize remote
exit
----------------------
c:\web\aaa と webserverのc:\inetpub\aaa
で同期をとりたい場合
syncweb aaa
を実行して、
scp.scrの中で
cd c:\inetpub\aaa
とできるのかな。。と思いまして。
とりあえず、リダイレクトで
echo cd c:\inetpub\%1 >scpup.scr
echo synchronize remote >> scpup.scr
としました。
scp.scrが3行程度なのでこのようにしましたが、
引数を渡せる技をご存知でしょうか。。
- 4: のり (2005-03-01T00:02:13+09:00) nori@noasobi.net
- ちょっと考えてみましたが、私には思いつかないですねぇ。すみません。
同期を取りたいディレクトリの数がそんなに多くないのであれば、バッチファイルとスクリプトを複数書くという手が思いつきますが。一度書いてしまえばあとは楽なので。
もしくは、何らかのスクリプトを使って、バッチファイルや winscp 用のスクリプト自体を動的に生成するとかも考えられますが。
- 5: あや (2005-03-02T23:14:18+09:00)
- 今回は同期を取りたいディレクトリはあまり多くないので、複数のバッチファイルで対応したいと思います。
ありがとうございました!
トラックバック
- 1: だわもん/WinSCPでスクリプトを使う場合 (2007-06-04T20:56:04+09:00)
- WinSCPで スクリプトを使うのには, どうしたらよいの?
- この記事の永続的 URI ならびに トラックバック ping URI
- http://diary.noasobi.net/2005/01/diary_050104a.html
rNote の記事作成用の何か
2005-01-02
この日記を rNote に移行したわけですが、私はローカルなエディタで書くのが好きなのでそのための環境を構築する必要があります。というわけで、まずはファイルを作成するところから。
rNote はひとつの記事が1つの xml ファイルから生成されます。デフォルトでは、entries ディレクトリ以下にサブディレクトリを作ると、それがそのままカテゴリーになるのですが、私の場合、ひとつの記事が複数のカテゴリーに属せるようにしたいのでこの機能は使っていません。代わりにもろもろの事情により、entries 以下には、2003 とか、2004 といった記事の年代を示すサブディレクトリと、日記以外の何か(何)という意味合いの etc というサブディレクトリがあります。2004とかの下には、01~12までの月ごとの記事を納めるサブディレクトリがあります。で、月ごとにディレクトリにその日の記事をおくわけです。で1日に複数の記事を書くこともあるので、ファイル名の末尾に a とか b とかをつけています。例えば、2005年1月2日にはじめて書くこの記事は、entries\2005\01\diary_050102a.xml というファイルに書かれることになります。もし二つ目ならば、entries\2005\01\diary_050102b.xml です。月が変わるごとにこれらのディレクトリを作ったり、あるいは日記を書くたびに、それなりのファイル名で記事を作るのは面倒です。
ということで、これらのことをバッチファイルひとつ実行で自動で出来るようにするというのが、今回の指令(何)です。というわけで、作ったのが以下の php スクリプト、名づけて diary.php です。なにも php でやる必要はないのですが、私が今一番書きやすいのが、php スクリプトなので。:p)
<?php
$entries = "d:\\web\\noasobi\\diary\\entries\\";
$openbat = "d:\\web\\noasobi\\diary\\ftp\\open.bat";
$editor = "c:\\bin\\xyzzy\\xyzzycli.exe"
$year = date("Y")."\\";
$month = date("m")."\\";
$day = date("d");
$entry = array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z");
$dh = @opendir($entries.$year.$month);
if($dh==0){
mkdir($entries.$year.$month);
$dh = opendir($entries.$year.$month);
}
closedir($dh);
for($i=0; $i<25; $i++){
$file = $entries.$year.$month."diary_".date("y").date("m").$day.$entry[$i].".xml";
if(!file_exists($file)){
break;
}
}
$fp = fopen($openbat,"w");
fwrite($fp, $editor." ".$file."\n");
fclose($fp);
?>
これで、その日の初めての記事書きなら、diary_yymmdda.xml が、ふたつ目なら、diary_yymmddb.xml が、26個目なら、diary_yymmddz.xml が指定のエディタで開かれるはずです。まぁ、27個以降はどうするかという問題もありますが、多分そんなに書くことはないので大丈夫でしょう。:p)
で、このスクリプトを呼び出して、エディタを起動させるのが、以下の diary.bat です。パスの通ったところにおいておきます。
@echo off
php -q d:\web\noasobi\diary\ftp\diary.php
call d:\web\noasobi\diary\ftp\open.bat
diary.php の置き場所によってパスを適宜書き換える必要があります。
次回は、あちこち(何処)からどうやって更新するかとか、どうやってテンプレ(何)を挿入するかとかが指令(何)です。
地震・雷・台風・山親父な2004年
2004-12-31
今年は災害が多く発生した上に、天候不順その他諸々の影響か、熊が里へ下りてきて大暴れした年でした。
それでも、そんな時もあるさってことで来年はぜひいい年にしたいものです。皆さん今年一年あれこれありがとうございました。来年もどうぞよろしくお願いいたします。
もたもたしていましたが、どうにか年内に準備ができたようなので、rNote ヘ移行します。
前の URI のリソースも、そのまま使えるように工夫しましたがもしかするとうまくいっていないところがあるかもしれませんが、そこらあたりはおいおい直していきたいと考えています。
移行にあたって、#汚れの巣(何)の皆様方にはあれこれアドバイスいただきました。どうもありがとうございます。とりわけ cho45 さん には、カテゴリー表示切替スクリプトを書いていただきました。どうもありがとうございます。
大掃除の時間(何)なのでとりあえず、移行についてのアレコレについてはまた日を改めて書きたいと重います。