5

SFTPアクセスのみを許可するローカルサーバーからリモートサーバーにファイルを転送するためにlftpを使用しています。次の構文を使用してファイルを転送しています。

lftp -c "open -u $UN,$Pass sftp://$Server ; mirror -R $Directory"

ファイルの転送に関しては、これはすべて正常に機能しています。これを.shファイルに埋め込まれたcronとして使用しているため、lftpが失敗することがあります(理由は不明です)。

転送の正確性を保証するために使用できる終了コードまたは何かを使用して、転送を確認するにはどうすればよいですか?

4

1 に答える 1

7

シェルスクリプトでラップする必要があると思います。

シェルスクリプトは、たとえば次のようなlftpスクリプトを生成する必要があります。

set xfer:log true
set xfer:log-file "/path/to/somewhere/$DATESTAMP.log"
lcd "/path/of/source"
open -u $UN,$Pass sftp://$Server
mirror -R $Directory
quit

によって実行しlftp -f $ScriptNameます。

その後、生成されたログファイルを解析します。AFAIKには、成功した転送のみが含まれています。

awk '{print $3,$6}' $DATESTAMP.log | sed -r -e 's/ [0-9]+-/ /'

上記は、ファイルごとに転送されるファイルとバイトのリストを生成します。たとえば、結果をループして実際のファイルサイズと比較できます。

# WARNING: Script assumes that filename contains no space.
while read fname fsize; do
  # The following line used if the lftp runs from e.g. the source folder
  actualname=$Prefix/$fname
  actualsize=$(stat -c "%s" "$actualname")
  if (( actualsize != fsize )); then
    # Some error handling code here
  fi
done <<< "$(awk '{print $3,$6}' $DATESTAMP.log | sed -r -e 's/ [0-9]+-/ /')"

注:whileループ内の変数の操作を可能にするために、配管の代わりに「herestring」を使用しています。

于 2013-01-10T08:53:50.153 に答える