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

관련 정보