私は、リモートディレクトリをローカルディレクトリに効率的にミラーリングする必要があるlftpスクリプトを作成しており、一度に複数のギガバイトファイルを転送する可能性があります。
要件の1つは、ローカルユーザーがローカルファイルを不要になったときに削除できることです。このスクリプトを実行する「ローカル」コンピューターが複数あるため、リモートファイルを削除したくないのは、それが必要です、持っています。そのため、スクリプトは--newer-thanフラグを使用して、lftpスクリプトが最後にローカルで実行されてからリモートサーバー上で新規/変更されたファイルのみをミラーリングします。
スクリプトの重要な部分は次のとおりです。
lftp -u $login,$pass $host << EOF
set ftp:ssl-allow yes
set ftp:ssl-protect-data yes
set ftp:ssl-protect-list yes
set ftp:ssl-force yes
set mirror:use-pget-n 5
mirror -X * -I share*/* --newer-than=/local/file/last.run --continue --parallel=5 $remote_dir $local_dir
quit
EOF
EOFはbashスクリプトの実際の終わりではないことに注意してください。
したがって、last.runファイルのタイムスタンプよりも新しいshare /ディレクトリ自体を含め、share/ディレクトリ内のものを除いて$remote_dir内のすべてを除外します。
これは、share /という別の特定の名前のディレクトリがshareWHATEVER/と呼ばれる場合を除いて、期待どおりに機能します。
したがって、share / shareWHATEVER/stuff.txtが存在します。
初めて実行すると、shareWHATEVER / stuff.txtがリモートからローカルにコピーされ、すべて問題ありません。
shareWHATEVERディレクトリ全体(stuff.txtを含む)をローカルで削除すると、次にスクリプトを実行するときに、stuff.txtはミラーリングされませんが、リモートサーバーでタイムスタンプが変更されていなくても、shareWHATEVERはミラーリングされます。
したがって、ローカルでは、ディレクトリが空のshare /shareWHATEVER/のように見えます。
自身のタイムスタンプもファイルのタイムスタンプもローカルチェックよりも新しいものではないのに、shareWHATEVERがコピーされる理由はありますか?
ありがとう。