シェルスクリプトを使用して29を超えるファイルをターゲットサーバーにコピーすることはできません。

シェルスクリプトを使用して29を超えるファイルをターゲットサーバーにコピーすることはできません。

1K以上のファイルをあるサーバーから別のサーバーに移動したいのですが、29ファイルのみコピーされ、リセットをコピーできません。 SCPを使用するのと同じ状況です。

#scripts for backup
#sripts prepared by dhafer [email protected]
#!/bin/bash
date=$(date +"%Y%m")
/usr/bin/expect<<EOF
  cd /home/mdsp/lcftp/templc/sag/sa/run/sa/10.157.78.40
  spawn  bash -c "/usr/bin/scp *$date*.log [email protected]:/tmp/dhafer"
  expect "Password:"
  send "Zain@123\r"
  expect eof
EOF

そして

#scripts for backup
#sripts prepared by dhafer 0592996292 [email protected]
#!/bin/bash
DATE=$(date +"%Y%m")
HOST=10.157.78.143
PORT=22
USER=root
PASSWORD=Zain@123
SOURCE_FILE=/home/mdsp/lcftp/templc/sag/sa/run/sa/10.157.78.40/*$DATE*
TARGET_DIR=/tmp/dhafer
/usr/bin/expect<<EOD
  spawn /usr/bin/sftp -o Port=$PORT $USER@$HOST
  expect "password:"
  send "$PASSWORD\r"
  expect "sftp>"
  send "put $SOURCE_FILE $TARGET_DIR\r"
  expect "sftp>"
  send "bye\r"

確認していただけますか?

ベストアンサー1

コマンドラインが長すぎる可能性があります。たとえば、を使用していくつかの小さなscpコマンドを実行する必要がありますxargs。ただし、予想/パスワードスクリプトはコーディングを少し難しくします。

おそらくここで「xargsに似た」scpソリューションを見つけることができます。 xargsを使用してscpに引数を提供する

または find、tar、ssh パイプラインを使用します。

find . -maxdepth 1 -name "*$date*.log" -print0 |\
    tar -czvf backup.tar.gz --null -T - |\
    ssh user@host "cd /tmp/dhafer && tar xvzf -"

または、rsyncシェルワイルドカードを使用せずに試してみることもできます。

rsync --include="*$date*.log" --exclude="*" ./ [email protected]:/tmp/dhafer/

ノートとにかく、SSHで公開鍵認証を使用できる場合は役立ちます。

おすすめ記事