2015/08/01

lftp

自己在 DigitalOcean 租了空間,所以我現在習慣把專案上傳到 server,在 server 編輯跟上 git server,只要我有 terminal 的情況下在哪邊都可以工作 QQ,如果客戶的 demo 網站在我這邊的話就很方便,但常常會遇到的情況是客戶有自己的 ftp,所以變成邊改要邊上傳,在本機的 windows 環境下我使用 WinSCP 來作這件事情,他可以 monitor 某個資料夾,監控到有檔案更新便自動上傳 FTP,並且可以設定一些 filter,在 Linux 部分我一直在找最佳解,用了幾個方法以後 lftp 可能是最接近的答案了。

傳統的 ftp 指令必須掛在 server 上,要上傳或下載要自己切換根本不可能,假設不能自動檢查更新,起碼要可以增量備份,於是我用了 rsync 跟 scp 這兩個指令多次測試,都沒有辦法順利完成我要的,lftp 好處是,他可以模擬 http 的辦法進入 ftp,所以你可以打好一堆指令一次執行,也可以把執行腳本寫在文字檔裡去吃,重要的是他有 mirror 功能可以做到增量修改備份上傳這件事,除了自動監控以外沒什麼可以挑剔的了。

簡易參數介紹

  • -c 後面直接加上所需要的指令
  • -e | –delete 沒有檔案就刪除
  • –only-newer 上傳或下載比較新的
  • –parallel 同時使用的序列
  • –verbose 詳盡模式
  • -r | –no-recursion 不遞迴檢查
  • -R 下載變上傳,備分到遠端
  • -u 後面則是接上帳號與密碼,就能夠連接上遠端主機了,如果沒有加帳號密碼, lftp 預設會使用 anonymous 嘗試匿名登入
  • -f 可以將指令寫入腳本中,這樣可以幫助進行 shell script 的自動處理喔!

你可以直接打整行的命令

lftp -e "put /local/path/xxx.mp4 bye" -u username,password ftp.myftp.com

也可以將指令寫在指令中,下面是我自己的工作習慣設訂

upload.lftp
open username:password@ftp.myftp.com # 若要連 sftp 可改成 sftp://username:password@myftp.com
cd /to/path/ # 遠端需要的正確資料夾,如果沒有可以不用
mirror -R /local/path/ --only-newer --verbose –parallel=10 --exclude .git/ --exclude upload.lftp --exclude-glob *.swp
echo done!

這樣只要執行下面的指令就可以上傳了

lftp -f upload.lftp

mirror 介紹

mirror 這個指令可以做到上下傳同步的功能,也可以指定資料夾同步,主要的下法是 mirror source target,假設今天 remote 的目錄是 /www/public/ local 是 /var/www/site/,要下載同步指令為 mirror /www/public/ /var/www/site/,上傳同步則相反,mirror -R /var/www/site/ /www/publc/,假設我們今天是要同步下載 css 資料夾下的檔案,指令為 mirror /www/public/css/ /var/www/site/css/,如果是要同步上傳的話就是 mirror -R /var/www/site/css /www/public/css,如果你確定你是在該資料夾的決對路徑,假設你已經在 /var/www/site/ 下了,你要同步下載的話只要指定 source 路徑即可,mirror /www/public/css,如果你要同步上傳,反過來就是對方路徑是 target,所以你在 config 必須先指定到該資料夾成為 target,然後你在指定自己 source 要同步的目錄,不打的話就是整個目錄。

open username:password@ftp.com
cd /www/public/
mirror -R --verbose css/

vim 的 user 可以裝上 lftp-sync.vim 這個由 c9s 大大寫的套件,可以存檔後上傳所有的 buffer 或者是單檔,然後在寫一個 sync 的檔案拿來跑一些可能是由美術更新的資料夾,每次要做專案前 sync 一次,應該就可以大致解決檔案同步問題。

###參考網站###

沒有留言: