2012-12-14 64 views
0

我有一個bash代碼來備份我的iOS文件,並將它們發送到我的網站FTP目錄中:(http://mywebsite.com/sms)但是當我運行此代碼時,它不是' t .zip'zip'ing這些文件並將文件'zippyy.db'留在我的網站的根目錄下,而不是在/ sms文件夾中。FTP壓縮腳本 - STUCK

我將從幾個設備上運行這個腳本,所以當我執行代碼時,如果FTP中已經有一個名爲zippyy.zip的文件,它會將其更改爲zippyy1.zip,zippyy2.zip等。

我會很感激有人爲我重寫腳本。先謝謝你!這裏是我的代碼:

#!/bin/bash 

ROOTFOLDER="/var/root" 
ZIPNAME="zipfolder" 
ZIPFOLDER=$ROOTFOLDER/$ZIPNAME 
LIBFOLDER="/var/mobile/Library" 
ZIPFILE="zippyy.zip" 

mkdir -p $ZIPFOLDER 
cp $LIBFOLDER/SMS/sms.db $ZIPFOLDER/ 
cp $LIBFOLDER/Notes/notes.sqlite $ZIPFOLDER/ 
cp $LIBFOLDER/Safari/Bookmarks.db $ZIPFOLDER/ 
cp $LIBFOLDER/Safari/History.plist $ZIPFOLDER/ 
cd $ROOTFOLDER 
zip -r $ZIPFILE $ZIPNAME 

HOST=HOSTNAME 
USER=USERNAME 
PASS=PASSWORD 

ftp -inv $HOST << EOF 
user $USER $PASS 
cd sms 
dir . remote_dir.txt 
bye 
EOF 

FILECOUNT=$(grep zippyy remote_dir.txt | wc -l) 
NEXTDB="zippyy${FILECOUNT}.db" 
mv $ZIPFILE $NEXTDB 

ftp -inv $HOST << EOF 
user $USER $PASS 
put $NEXTDB 
bye 
EOF 
+0

用'sh -x script'運行腳本。 –

+0

幾乎工作!只需要弄清楚爲什麼我得到.db文件而不是.zip? –

+0

也許是因爲'NEXTDB =「zippyy $ {FILECOUNT} .db」'。 –

回答

0

你的意思是說,你的存檔是腐敗的,一旦它被ftp'd?

它很可能是您的計算機在默認模式下發送文件,它必須是ASCII模式。

但首先,你的本地zip文件的副本,請測試選項

zip -t $ZIPFILE 

如果成功,那麼改變你的FTP這裏-DOC到

ftp -inv $HOST << EOF 
user $USER $PASS 
binary 
put $NEXTDB 
bye 
EOF 

注加的ftp命令binary,這意味着發送文件時不需要翻譯ASCII碼。


我們強烈建議您使用以下命令

man ftp 

並通過它至少讀一次。當然,有些部分甚至是一個很好的ftp手冊頁,我沒有找到有用的東西! ;-)。另外請注意,有很多ftp客戶端,只是遵循一套通用的選項,參數和子命令。不要認爲,一旦你在家裏工作,它會在辦公室,或在你的朋友的地方工作!

IHTH

+0

你真了不起!謝謝你,先生!我只是在用戶$ USER $ PASS 後再加上:binary:再次謝謝:) –

+0

OH!還有另外一個問題,這個腳本需要我以root的身份登錄,我怎麼能把sudo寫入腳本,所以我不必在運行腳本之前使用:su。你介意爲我寫一些小代碼,以便我可以複製它嗎?會很感激!謝謝:) –

+0

我對'sudo'沒有多少經驗。你在工作環境嗎?如果是的話,他們可能會對你做這樣的事情有規則。如果你在家裏做這個,你必須閱讀'sudo'手冊頁,並找出要寫入sudo配置文件的條目。祝你好運。 – shellter