scp를 사용하여 폴더에 최신 파일을 다운로드하는 방법은 무엇입니까? 실행하고 싶습니다. 이

특정 디렉토리의 최신 (최신) 파일을 로컬 디렉토리로 다운로드하기 위해 scp 전송을 실행하고 싶습니다.

이 같은:

  • 출처 :root@rimmer.sk:/home/rimmer/backups/
  • 목적지 :/home/rimmer/backups/

에서 최신 파일 만 가져 오는 동안 파일이 전부는 아닙니다 backups.



답변

변수가 server있고 dir정의되어 있다고 가정하면 할 수 있습니다

$ dir="~"
$ server="user@server.com"
$ scp $server:$dir/$(ssh $server 'ls -t $dir | head -1') .

먼저 최신 파일을 찾은 다음 복사하십시오.

참고 : 나는 바보를 확인하지 않았습니다 (예 : 최신 항목이 폴더 임)


답변

scp소스에서 대상으로 파일을 맹목적으로 복사한다는 의미에서 바보입니다. 파일을 복사하는 데보다 지능적인 것을 원한다면과 같은 도구를 사용해야합니다 rsync.

$ rsync -avz root@rimmer.sk:'$(find /home/rimmer/backups/ -ctime -1)' /home/rimmer/backups/

마지막 날 rimmer.sk의 backups 디렉토리 (-ctime -1)에서 누락되었거나 변경된 파일 만 로컬 백업 디렉토리로 복사합니다.

-ctime n
   File's  status  was last changed n*24 hours ago.  See the comments for
   -atime to understand how rounding affects the interpretation of file
   status change times.

참고 문헌


답변

파티에 약간 늦었지만 아마도 ssh 및 rsync가있는 솔루션은 다음과 같이 작동합니다.

source_host="yourhost.com"
source_dir="/a/dir/on/yourhost.com/"
target_dir="/the/dir/where/last_backup/will/be/placed"
last_backup=$(ssh user@${source_host} "ls -t ${source_dir} | head -1")
if [ "${last_backup}" == "" ]; then
    echo "ERROR: didn't find a backup, cannot continue!"
else
    echo "the last backup is: ${last_backup}"
    rsync -avzh user@${source_host}:${source_dir}/${last_backup} ${target_dir}
fi