디렉터리에 여러 파일을 수신하고 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
파일이 이미 존재하는 경우 추가됩니다.