FTP上传失败

时间:2012-12-13 08:57:19

标签: bash unix terminal

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

这是我的剧本:

  #!/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

3 个答案:

答案 0 :(得分:0)

为什么在脚本中使用cp -i? -i开关使复制&#34;交互式&#34;期待来自用户的输入,因为脚本不会得到它。

另外,您可以使用&#34;代码示例&#34;格式化脚本吗?格式而不是子弹点! ; - )

答案 1 :(得分: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

答案 2 :(得分: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