差分FTPを考える(9 – 削除

削除機能を考えてみました。

最後にハッシュをファイルに保存する直前に実行します。

# 削除
while ( my($key ,$value) = each %btmp ){
    if (exists $ftmp{$key}){
    }else{
        print qq(del $key\n);
        $ftp->delete($key);
    }
}

%btmpは前回のハッシュです。
前回のハッシュのキー(つまりファイルパス)をすべて取り出して
%ftmp(今回のハッシュ)の中にそのキー(ファイルパス)があるかないかをチェックしていきます。

あった場合にはスルー、
なかった場合には削除を行います。

ファイルを転送する際はちゃんとそのディレクトリに移動(cwd)しないとうまく転送できません。

つまり、a.txtというファイルをtest/a/b/のディレクトリにputしたい場合は、

  1. test/a/b/ にCD
  2. a.txt をput

としなければなりません。「test/a/b/a.txt」として転送、と一発でいってほしいところですが、NGとなってしまいます。

こう考えると転送先の「test/a/b/a.txt を削除」はエラーになりそうですが、
削除する場合はこれで行けるようです。

その為CDはしていません。

 

2017/09/27 22:55:48 [put] ./2/4/cc.txt
del ./2/4/c.txt

これは、./2/4/c.txt というファイルを ./2/4/cc.txt と変更してみた場合の結果です。

cc.txtは新規と認識されますので、転送されます。

その後、./2/4/c.txt はなくなっていると認識され、削除されます。

どうやらうまく動いているようです。