0

我有一个通过 FTP 备份我的 iOS 文件的 bash 脚本,我遇到了一些问题,我只是想知道是否有人可以帮助我?

这是我的脚本:

  #!/bin/bash
  mkdir zipfolder
  cp /var/mobile/Library/SMS/sms.db /var/root/zipfolder/
  cp /var/mobile/Library/Notes/notes.sqlite /var/root/zipfolder/
  cp /var/mobile/Library/Safari/Bookmarks.db /var/root/zipfolder/
  cp /var/mobile/Library/Safari/History.plist /var/root/zipfolder/
  cd var/root
  zip -r zippyy.zip zipfolder

  HOST=HOSTNAME
  USER=USERNAME
  PASS=PASSWORD

  ftp -inv $HOST << EOF
  user $USER $PASS
  cd sms
  LIST=$(ls | grep zippyy*.zip)

  FILECOUNT=0
  for FILE in $LIST
  do
      if [ -f $FILE ];
      then
          FILECOUNT+=1
  done
  FILECOUNT+=1
  NEXTDB="zippyy$FILECOUNT.db"
  mv zippyy.zip $NEXTDB

  ftp -inv $HOST << EOF    
  put $NEXTDB
  bye
  EOF

  rm -f zippyy.zip
  rmdir zipfolder

我收到以下错误:

  ?Invalid command
  ?Invalid command
  We only support non-print format, sorry.
  ?Invalid command
  ?Invalid command
  ?Invalid command
  ?Invalid command
  ?Invalid command
  ?Invalid command
  ?Invalid command
  ?Invalid command
  ?Invalid command
  (local-file) (remote-file)

  rmdir: failed to remove 'zipfolder': Not a directory
4

3 回答 3

0

为什么在脚本中使用 cp -i?-i 开关使副本“交互式”,因此期望用户输入,由于脚本,它不会得到。

此外,您能否使用“代码示例”格式而不是项目符号来格式化您的脚本!;-)

于 2012-12-13T10:38:53.017 回答
0

格式化的新答案...

我不完全清楚你想要做什么。看起来您正试图找出 ftp 服务器上有多少现有备份,并将新备份重命名到列表末尾。

您不能在 ftp 服务器上执行代码(巨大的安全漏洞!),因此完成此操作的最佳方法可能是获取远程目录列表并在本地处理它。尝试使用类似的东西:

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

{现在处理 remote_dir.txt 以获取新的备份名称}

  ftp -inv $HOST << EOF    
  user $USER $PASS
  put $NEXTDB
  bye
  EOF
于 2012-12-13T13:12:08.660 回答
0

答案#3格式化

尝试这样的事情(完全未经测试!)

#!/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
于 2012-12-13T15:40:27.263 回答