FTPコマンド

.netrcにパスワード設定しておくと、毎回入力しなくて良いので便利

machine <ホスト名> login <ユーザー名> password <パスワード>

上記の様に書いて、ファイルの権限を600にしておく

$ chmod 600 ~/.netrc

ftp

lftp

ftpより高機能。GNU readlineを使ったコマンド、ファイル名補完が可能。

~/.lftprcもしくは~/.lftp/rcもしくは~/.cache/lftp/rcに設定を書く。

macだとhomebrewでインストールできる。

$ brew install lftp

get

lftp > get <ファイル名>

でファイルをダウンロードする。

getした時に同名ファイルがローカルにあると

lftp > get .vimrc
get: .vimrc: file already exists and xfer:clobber is unset

のように出て、ダウンロードできない。

lftp > set xfer:clobber on

のようにコマンドでうつか、~/.lftprcもしくは~/.lftp/rcに設定を書きこんでおくとダウンロードできる。

ダウンロードする前に上書きするかどうか聞くようにするにはgetを以下のエイリアスに設定する。

alias get "eval -f "shell "test -f $0 && echo -n 'overwrite? [y/n] ' && read answer && case $answer in; y) return 0;; *) return 1;; esac || return 0" && command get $0""

getのオプションは使えないので注意。

また、こうすると、バージョンが4.6.2以前だと、editはエイリアスで、そこで設定されたgetもこのエイリアスになってしまうのでgetをcommand getに変更する必要がある(editの項参照)。

edit

editコマンドで$EDITORを使って、ファイル編集ができる。

2015-04-16にリリースされた4.6.2からはコマンドで実装されていて、~/.cache/lftp/edit/<file名から拡張子を抜いたもの>.<host名>-<lftpのプロセスID>.<ファイルの拡張子>の一時ファイルが作成され、編集保存されたらアップロードして、一時ファイルが削除されるようである。

それ以前のバージョンはエイリアスでhelp editするとエイリアスの内容がわかる。

> help edit
edit is an alias to `eval -f "get $0 -o ~/.lftp/edit.tmp.$$ && shell \"cp -p ~/.lftp/edit.tmp.$$ ~/.lftp/edit.tmp.$$.orig && $EDITOR ~/.lftp/edit.tmp.$$ && test ~/.lftp/edit.tmp.$$ -nt ~/.lftp/edit.tmp.$$.orig\" && put ~/.lftp/edit.tmp.$$ -o $0; shell rm -f ~/.lftp/edit.tmp.$$*"'

~/.lftpというディレクトリがないと

get: .vimrc: /Users/tmsanrinsha/.lftp/edit.tmp.15933: No such file or directory

というエラーが出るため、あらかじめ作っておくこと。

また、getをエイリアスに設定した場合はgetをcommand getに変更しておく。

alias edit "eval -f \"command get $0 -o ~/.lftp/edit.tmp.$$ && shell \\\"cp -p ~/.lftp/edit.tmp.$$ ~/.lftp/edit.tmp.$$.orig && $EDITOR ~/.lftp/edit.tmp.$$ && test ~/.lftp/edit.tmp.$$ -nt ~/.lftp/edit.tmp.$$.orig\\\" && put ~/.lftp/edit.tmp.$$ -o $0; shell rm -f ~/.lftp/edit.tmp.$$*\""

またエイリアスのeditは一時ファイルにファイルの拡張子がないため、エディタでファイルタイプが設定されない。拡張子を含めた一時ファイルを作って編集したい場合は下のvimコマンドを参照。

cat

catコマンドでファイルの内容を標準出力できて、パイプでコマンドに渡すことができる。

less

lessはmoreのエイリアス

lftp > help less
less is an alias to `more'

moreは$PAGERが設定されているとそちらが使われるのでlessをつかいた場合は

$ export PAGER=less

しておく。

> cat <ファイル> | less

としてもOK。

vim

editのエイリアスコマンドだとファイルの拡張子が付かないので、付くようにしてvimで開くエイリアスを作った。

alias vim "eval -f \"command get $0 -o ~/.lftp/edit.tmp.$$.$0 && shell \\\"cp -p ~/.lftp/edit.tmp.$$.$0 ~/.lftp/edit.tmp.$$.orig && vim ~/.lftp/edit.tmp.$$.$0 && test ~/.lftp/edit.tmp.$$.$0 -nt ~/.lftp/edit.tmp.$$.orig\\\" && put ~/.lftp/edit.tmp.$$.$0 -o $0; shell rm -f ~/.lftp/edit.tmp.$$*\""

view

fileをvimのread onlyで開く

alias view "eval -f \"command get $0 -o ~/.lftp/edit.tmp.$$.$0 && shell \\\"vim -R ~/.lftp/edit.tmp.$$.$0\\\"; shell rm -f ~/.lftp/edit.tmp.$$*\""

alias edit source -e ~/.lftp/edit.sh

シェルスクリプトを書いて実行することも可能なようだ。

Editing Remote Files on lftp | Buzu’s Oficial Blog

補完

エイリアスコマンドはファイル補完のときにローカルファイルを補完対象にするみたい。Meta-Tabを使うとリモートのファイルを補完する。