404 motivation not found | t_ishidaのブログ

11月/10

26

SFTPのなんか

能書き

取り急ぎ作ってみた。ローカルで編集したファイルをSFTPでリモートの目的のディレクトリにアップロードするためのスクリプト。
テキストエディタの保存に引っ掛けて使うイメージ

使い方

以下みたいな適当な感じで

  • プロジェクトルートに”.aurc”というファイルを作る( .aurcのレイアウトはまた後で)
  • 以下のスクリプトを適当なファイルに保存する(ex:~/auto_upload.pl)
  • perl ~/auto_upload.pl “上げたいファイルのパス”
  • ファイルが適当にSFTPでアップされる

vimの場合

.vimrcに以下のように記述してwrで保存する

cmap wr w<Bar>!perl ~/auto_upload.pl "%:p"

保存した時に適当に実行される。
上がったかどうかを適当に目視確認してエンターを叩かないとダメ。

.aurcのレイアウト

1行目:user_name@hostname
2行目:/path/to/identity_file
3行目:リモートホストでのプロジェクトルート

ソース

適当に直してください

諸々

  • 自分しか使うイメージが無かったのでクイックハック的なあんま考えてないソースなので汎用的に使う時には直す必要がある
  • Mac + vim + 一回以上パスワードが保存されている環境またはidentity_file だけでパスワードが無い環境しか想定されていないのでパスワードとか必要であれば直す必要がある
  • FTPとか他のプロトコルとか使うのであれば直す必要がある

今のところ僕自身はこれで困らない感じですが、万が一使ってみようと思っている人が居て何か要望あればコメントとかに書いてくれると嬉しいです。※やれるかどうかはともかくとして

#/usr/bin/perl
use strict;
my ( $target_file ) = @ARGV;

## 設定ファイルの検索
my $tmp         = $target_file;
my $host        = '';
my $identity    = '';
my $local_root  = '';
my $remote_root = '';
while ( $tmp =~ s#/[^/]+$## ){
  opendir DIR, $tmp;
  while ( my $fn = readdir ( DIR ) ){
    $fn eq '.aurc' or next;
    $local_root = $tmp;
    open F, $tmp . '/' . $fn;
    ( $host, $identity, $remote_root ) = <F>;
    chomp $host;
    chomp $identity;
    chomp $remote_root;
    last;
  }
  close DIR;
  $remote_root and last;
}
$remote_root or die '設定ファルなくね?';

## リモートのパスを算出
my $remote_file = $target_file;
$remote_file =~ s#$local_root##e;
$remote_root =~ s#/$##;
$remote_file =~ s#^/##;
$remote_file = $remote_root . '/' .$remote_file;

## SFTPコマンド
my $cmd = 'sftp ';
$identity and $cmd .= ' -oIdentityFile="' . $identity . '" ';
$cmd .= $host;
open  SFTP, '| ' . $cmd;
print SFTP 'put "' . $target_file . '" "' . $remote_file . '"' . "\n";
print SFTP "quit\n";
close SFTP;
Share and Enjoy:
  • Digg
  • del.icio.us
  • Google Bookmarks
  • Tumblr
  • email
  • Facebook
  • FriendFeed

RSS Feed

コメントはまだありません。

Leave a comment!

<< Macの環境作りついて

【モニプラ】【超簡単アンケート!】あなたのIT活用度についてお聞かせください♪  に 参加してみた >>

Find it!

Theme Design by devolux.org

Tag Cloud