ディレクトリに複数のファイルを受信し、60分以内に受信したファイルを別のサーバーに転送する必要があるシナリオがあります。だから、次のコマンドを使用します。
{ find -maxdepth 1 -type f -mmin -60| cut -d'/' -f2 | sed 's/^/put /' ; echo bye ; } | \
/usr/local/bin/sshpass -p password sftp -oBatchMode=no [email protected]:/folder
コマンドを変更し、転送中のファイルのファイル名を印刷するログファイルを作成する必要があります。以下のスクリプトを作成しましたが、ログファイルも送信され、実行中なので、なぜか信頼できません。探す2回コマンドを実行すると、ログファイルの作成中に新しいファイルが送受信される可能性があるため、わずかなデータ差が生じる可能性があります。この問題を解決する方法を提案してください。
#!/bin/bash
file=/root/test/file_$(date +%Y-%m-%d_%H%M%S)
find -maxdepth 1 -type f -mmin -60| cut -d'/' -f2 > $file
{ find -maxdepth 1 -type f -mmin -60| cut -d'/' -f2 | sed 's/^/put /' ; echo bye ; } | \
/usr/local/bin/sshpass -p password sftp -oBatchMode=no [email protected]:/folder
ベストアンサー1
tee
パイプラインの一部としてファイル名をファイルに保存するために使用できます。
find -maxdepth 1 -type f -mmin -60| cut -d'/' -f2 | tee -a /path/to/log.file | sed 's/^/put /'
-a
ファイルがすでに存在する場合は追加されます。