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

フォーマットの新しい答え...

あなたが何をしようとしているのか、私には完全には明らかではありません。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

スクリプトでcp-iを使用しているのはなぜですか?-iスイッチはコピーを「インタラクティブ」にするため、ユーザーからの入力を期待していますが、スクリプトが原因で取得できません。

また、箇条書きではなく「コードサンプル」形式を使用してスクリプトをフォーマットできますか?;-)

于 2012-12-13T10:38:53.017 に答える
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 に答える