![如何为正在传输到其他服务器的文件创建日志文件](https://linux22.com/image/173513/%E5%A6%82%E4%BD%95%E4%B8%BA%E6%AD%A3%E5%9C%A8%E4%BC%A0%E8%BE%93%E5%88%B0%E5%85%B6%E4%BB%96%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%E6%96%87%E4%BB%B6%E5%88%9B%E5%BB%BA%E6%97%A5%E5%BF%97%E6%96%87%E4%BB%B6.png)
我有一个场景,我在一个目录中接收多个文件,并且我需要将 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
现在,我需要修改命令并创建一个日志文件,我需要在其中打印正在传输的文件的文件名。我制作了下面的脚本,但不知何故不相信该脚本,因为日志文件也正在传输并正在运行寻找命令两次可能会导致一些数据差异,因为在生成日志文件时可能会收到并传输新文件。请建议如何解决这个问题。
#!/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
如果文件已存在,则会追加。