원격 서버에서 최신 파일 3개를 복사합니다.

원격 서버에서 최신 파일 3개를 복사합니다.

다른 유형의 파일 외에도 원격 서버(SCP 지원)에 .doc 파일 세트가 있습니다.

나는 스크립트를 보았다:

FILE=`ssh abc@xyz ls -ht /tmp/*.doc | head -n 1`
rsync -avz -e ssh abc@xyz:"$FILE" .

원격 서버에서 최신 파일을 복사하려면 "head -n 1" 매개변수를 사용하십시오. 그런데 "head -n 3" 매개변수를 사용해도 원격 서버에서 최신 파일 3개를 복사할 수 없다는 사실을 발견했습니다.

답변1

abc로그인 쉘이 xyz다음 과 같은 경우 zsh:

ssh abc@xyz 'cd /tmp && tar cf - ./*.doc(.LM-100om[1,3]) | gzip -3' |
  gunzip | tar xvf -

그렇지 않은 경우 zsh( zsh설치된 경우):

ssh abc@xyz "cd /tmp && exec zsh -c 'tar cf - ./*.doc(.LM-100om[1,3]) | gzip -3'" |
  gunzip | tar xvf -

/tmp어쨌든, (또는 세계적으로 쓰기 가능한 디렉토리)는 지뢰밭이라는 점에 유의하십시오 . 위에서 우리는 (.LM-100)100MiB보다 작은 일반 파일( 포함)만 선택 하고 tar심볼릭 링크를 따르거나 장치 또는 명명된 파이프의 내용을 읽지 않도록 매우 주의를 기울였습니다. 하지만 여전히 누군가가 파일을 몇 테비바이트로 확대할 수 있는 경쟁 조건이 있습니다. 확장 글로브와 tar실행 중인 명령.

물론 .doc확장자가 있는 악성 코드는 누구나 삭제할 수 있으므로 /tmp이러한 다운로드를 매우 주의해서 처리해야 합니다.

에 있는 것보다 개인 디렉토리에 있는 것이 더 좋습니다 /tmp.

답변2

lsN 줄을 잘라내어 한 줄에 1개의 파일 이름을 출력 head하지만 rsync파일이나 glob을 처리할 것으로 예상하면 다음과 같이 할 수 있습니다.

FILES=`ssh acb@xyz 'ls -t /tmp/*.doc' | head -n 3 | tr '\n' ','`
rsync -avz -e ssh abc@xyz:"\{$FILES\}" .

관련 정보