찾기와 함께 Rsync 사용

찾기와 함께 Rsync 사용

지난 24시간 이내에 생성되었으며 특정 파일 형식(*.png)의 파일을 복사하는 스크립트를 작성하려고 합니다.

내가 시도한 명령은 다음과 같습니다.

rsync -avz --ignore-existing --include='*.png' --exclude='*' \
 --files-from=<(ssh user@remote1 'find /home/admin/Backup/ -mtime -1 -type f -exec basename {} \;') \
  user@remote1:/home/admin/Backup/ /Repository/

이는 백업 디렉터리의 *.png 파일에 대해 작동하지만 파일이 2~3개 폴더 깊이인 경우, 즉 백업 디렉터리 내에 있는 경우 명령이 실패합니다 /home/admin/Backup/folder1/folder2/.

link_stat '/home/admin/Backup/example.png' failed: No such file or directory (2)

그 이유는 basename {}결과를 반환할 때 해당 위치를 잘라내기 때문입니다 rsync. 그래서 삭제하려고 하면 basename {}다음과 같은 결과가 나타납니다.

link_stat '/home/admin/Backup/home/admin/Backup/folder1/folder2/example.png' failed: No such file or directory (2)

소스 디렉토리를 추가하는 것과 마찬가지로 rsync수정 방법을 모르겠습니다. 이 문제를 해결하는 방법을 아는 사람이 있나요? 아니면 제가 원격 서버에서 이 파일을 잘못된 방식으로 가져오고 있는 것일까요?

답변1

man rsync물론 --files-from:

  The  filenames  that  are read from the FILE are all relative to
  the source dir -- any leading slashes are removed  and  no  ".."
  references  are  allowed  to go higher than the source dir.  

따라서 다음을 기준으로 경로를 출력해 보십시오 find.

rsync -avz ... --files-from=<(ssh user@remote1 'cd /home/admin/Backup/; find . -mtime -1 -type f -name "*.png")

또는 find /home/... ... -printf "%P\n", %P이후암소 비슷한 일종의 영양find예:

파일 이름과 파일이 발견된 명령줄 인수의 이름이 제거되었습니다.

-name "*.png"필터링이 가능하고 이미 사용되고 있는데 왜 필터링을 수행해야 하는지 알 수 없기 때문에 자유롭게 추가했습니다 rsync.find

관련 정보