다른 유형의 파일 외에도 원격 서버(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
ls
N 줄을 잘라내어 한 줄에 1개의 파일 이름을 출력 head
하지만 rsync
파일이나 glob을 처리할 것으로 예상하면 다음과 같이 할 수 있습니다.
FILES=`ssh acb@xyz 'ls -t /tmp/*.doc' | head -n 3 | tr '\n' ','`
rsync -avz -e ssh abc@xyz:"\{$FILES\}" .