sftp getを使用して、過去30分間に変更されたファイルのみをインポートします。

sftp getを使用して、過去30分間に変更されたファイルのみをインポートします。

.shスクリプトはファイルを保存するために他のコンピュータにexpect自動を使用します。私のスクリプトは、私が望む時点で30分ごとに実行するように設定されています。sftpgetget ただ最後の実行以降に生成(変更)されたファイル(過去30分以内に重複する危険性)私は、ファイルが特定の命名スキームに従うことを知っています。AppData*.RAWその中には*日付と時刻の文字列があります。ただし、これらのファイルがいつ作成されるのか、通信中のコンピュータに転送されるのか、数が異なるため、ファイルの数がどれくらいになるのかはわかりません。

...
/usr/bin/expect<<EOD
spawn sftp user@host
expect "User's password: "
send "$password\r"
expect "sftp>"
send "get ????"
EOD
...

getこのスイッチの使用に関するヘルプを検索し、参考資料を見つけて-neweronly試してみましたsynchronize。ただし、これを実装する方法やsynchronizeダイアログボックスにオプションがある場合はわかりません。sftp助けるget

sftpまた、私のコンピュータは、何千もの古いファイル(2013年から現在まで)を含むディレクトリに入ってくるファイルを保存する必要があるため、最後の30分のファイルのみをインポートする必要があります。

ベストアンサー1

sftp限られた能力。 SFTPを介して複雑なタスクを実行する最も簡単な方法は、次を使用することです。SSHFS。 SSHFS は、SFTP を使用してリモートファイルシステムをローカルファイルシステムとして表示するファイルシステムです。クライアント側では、SSHFSには次のものが必要です。ヒューズ、ほとんどの最新のuniceで利用可能です。サーバーでは、SSHFSにはSFTPが必要です。サーバーがSFTPを許可している場合は、SSHFSを使用できます。

たとえば、過去30分以内に変更されたファイルをコピーするには、まず.sftpを使用してSFTP経由でリモートディレクトリをマウントしますsshfs。使用SSHパスSSHパスワードを使用する必要がある場合。次に、ローカルで使用するコマンドを使用します(ここではGNUユーティリティを使用していますが、実行している操作によってはrsync -a mnt/ /local/path/より良い場合があります)。完了したら、SSHFSファイルシステムをアンマウントします。

mkdir mnt
sshpass -f password.txt sshfs user@host: mnt
find mnt -mmin -30 -exec cp -t /local/path/ {} +
fusermount -u mnt

おすすめ記事