sftpでバッチ処理: 再帰ダウンロード(ディレクトリ以下のすべてのファイル)とレジューム

sftpでバッチ処理再帰ダウンロード(ディレクトリ以下のすべてのファイル)とレジューム(再開)できるようにする。

  • 結論

mget -ar ディレクトリ名

  • 基本

まず、基本

sftp -o "batchmode no" -b test.ftp username@xxx.xxx.xxx.xxx

バッチファイル
(1)何もしない
test.ftp

bye

(2)ファイルを保存
test2.ftp

get test/test2/test.txt
bye

(3)test/test2 以下のファイルをget (レジュームされない、同じファイルを何度もとる)
test3.ftp

mget test/test2/*
bye

  • r オプション

(4)再帰的ダウンロードもできるらしい -r オプション (cygwin判)

sftp -r -o "batchmode no" -b test3.ftp usr@xxx.xxx.xxx.xxx

test3.ftp

mget test
bye

sftpコマンド自体でなく、mgetに-rオプションをつけてもOK
test以下を再起取得
以下のとおり:

mget -r test
bye

あたらしくとったもの
$ ls -lt | tail

  • rw-r--r-- 1 user1 None 0 1月 21 10:51 104
  • rw-r--r-- 1 user1 None 0 1月 21 10:51 103
  • rw-r--r-- 1 user1 None 0 1月 21 10:51 102
  • rw-r--r-- 1 user1 None 0 1月 21 10:51 101
  • rw-r--r-- 1 user1 None 0 1月 21 10:51 1000
  • rw-r--r-- 1 user1 None 0 1月 21 10:51 100
  • rw-r--r-- 1 user1 None 0 1月 21 10:51 10
  • rw-r--r-- 1 user1 None 0 1月 21 10:51 1
  • rw-r--r-- 1 user1 None 11635 1月 21 10:51 tmp_list.txt
  • rw-r--r-- 1 user1 None 24 1月 21 10:48 test3.ftp

前にとったもの
$ tail tmp_list.txt

  • rw-r--r-- 1 user1 None 0 1月 21 10:49 105
  • rw-r--r-- 1 user1 None 0 1月 21 10:49 104
  • rw-r--r-- 1 user1 None 0 1月 21 10:49 103
  • rw-r--r-- 1 user1 None 0 1月 21 10:49 102
  • rw-r--r-- 1 user1 None 0 1月 21 10:49 101
  • rw-r--r-- 1 user1 None 0 1月 21 10:49 1000
  • rw-r--r-- 1 user1 None 0 1月 21 10:49 100
  • rw-r--r-- 1 user1 None 0 1月 21 10:49 10
  • rw-r--r-- 1 user1 None 0 1月 21 10:49 1
  • rw-r--r-- 1 user1 None 24 1月 21 10:48 test3.ftp
  • a オプション

(4)レジュームあり -a オプション

mget -ar test
bye

前にとったもの

$ head tmp
合計 0

  • rw-r--r-- 1 user1 None 0 1月 21 11:40 tmp
  • rw-r--r-- 1 user1 None 0 1月 21 11:39 959
  • rw-r--r-- 1 user1 None 0 1月 21 11:39 619
  • rw-r--r-- 1 user1 None 0 1月 21 11:39 847
  • rw-r--r-- 1 user1 None 0 1月 21 11:39 455
  • rw-r--r-- 1 user1 None 0 1月 21 11:39 562
  • rw-r--r-- 1 user1 None 0 1月 21 11:39 290
  • rw-r--r-- 1 user1 None 0 1月 21 11:39 184
  • rw-r--r-- 1 user1 None 0 1月 21 11:39 488

あとにとったもの

$ ls -lt | head
合計 44

  • rw-r--r-- 1 user1 None 44997 1月 21 11:40 tmp
  • rw-r--r-- 1 user1 None 0 1月 21 11:39 959
  • rw-r--r-- 1 user1 None 0 1月 21 11:39 619
  • rw-r--r-- 1 user1 None 0 1月 21 11:39 847
  • rw-r--r-- 1 user1 None 0 1月 21 11:39 455
  • rw-r--r-- 1 user1 None 0 1月 21 11:39 562
  • rw-r--r-- 1 user1 None 0 1月 21 11:39 290
  • rw-r--r-- 1 user1 None 0 1月 21 11:39 184
  • rw-r--r-- 1 user1 None 0 1月 21 11:39 488

上書きされていないことがわかる.

スクリプトの例

lpwd
lcd data/ubuntu
mget -ar /xxxx/detail
lcd ../..
lpwd
cd data/ubuntu02$
mget -ar /yyy/detail
bye


参考:
https://web.kudpc.kyoto-u.ac.jp/manual/ja/login/mac_linux_scp
http://webkaru.net/linux/sftp-command/
https://www.freebsd.org/cgi/man.cgi?query=sftp&sektion=1