0

我有一个 bash 代码来备份我的 iOS 文件并将它们发送到我的网站 FTP 目录中:(http://mywebsite.com/sms) 但是当我运行此代码时,它不是 .zip'ing 文件和将文件“zippyy.db”留在我网站的根目录中,而不是 /sms 文件夹中。

我将从几个设备上运行这个脚本,所以当我执行代码时,如果 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
4

1 回答 1

0

你的意思是你的存档一旦被ftp'd就损坏了?

您很可能在您的机器上以默认模式发送文件,该模式必须是 ASCII 模式。

但首先,在您的 zip 文件的本地副本上,发出测试选项

zip -t $ZIPFILE

如果成功,则将您的 ftp here-doc 更改为

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

请注意添加了 ftp 命令binary,这意味着发送不带 ASCII 转换的文件。


强烈建议发出以下命令

 man ftp

并至少通读一遍。当然,即使是一个很好的 ftp 手册页,我也没有找到有用的部分!;-) 。另请注意,有许多 ftp 客户端,只是表面上遵循一组通用的选项、参数和子命令。不要以为一旦你让它在家工作,它就会在办公室或你朋友的地方工作!

IHTH

于 2012-12-14T19:14:52.583 回答