rsync와 find의 결합

rsync와 find의 결합

find & rsync를 사용하여 원격 컴퓨터에서 특정 파일을 백업하려고 하는데 아무 것도 얻지 못합니다.

*state*설정은 다음과 같습니다. rsync를 사용하여 원격 시스템 또는 *srm원격 시스템의 모든 파일이 포함된 백업을 로컬 디렉터리에 만들고 싶습니다 . 원격 컴퓨터에서 로그인 자격 증명을 설정하고 싶지 않기 때문에 원격 컴퓨터(궁금하신 경우 RetroPie)가 아닌 로컬 컴퓨터에서 실행하고 싶습니다. SSH 키를 올바르게 설정했습니다. 내 목표는 ~/retropie-backup에 로컬로 백업하는 것입니다.

내가 사용하고 있는 find 명령은 원격 시스템에서 잘 작동합니다(명확성을 위해 하나의 결과로 잘림).

$ find  -iname "*state*" -o -iname "*srm"
./RetroPie/roms/snes/EarthBound (USA).srm

여태까지는 그런대로 잘됐다. 또한 파일 이름의 공백에 대해 당황하지 않도록 rsync에 -s를 추가해야 한다는 것도 알고 있습니다. 그러나 두 가지를 결합하려는 시도는 작동하지 않습니다.

$ rsync -v -s pi@retropie:'`find  -iname "*state*" -o -iname "*srm"`' retropie-backup/
rsync: link_stat "/home/pi/`find  -iname "*state*" -o -iname "*srm"`" failed: No such file or directory (2)

나는 기본적인 것을 놓치고 있다고 말할 수 있지만 그것을 보지 못합니다. 어떤 제안이 있으십니까?

답변1

이 고양이의 가죽을 벗기는 방법에는 여러 가지가 있습니다.

다른 호출을 사용하여 파일 ssh목록을 생성하고 이를 rsync.find -print0

ssh -nq pi find -type f \( -iname "*state*" -o -iname "*srm" \) -print0 |
    rsync --dry-run -aiv --from0 --files-from - pi@retropie: retropie-backup/

또 다른 접근 방식은 rsync이러한 파일만 직접 포함하는 것입니다. 여기에는 모든 디렉터리를 포함하여 해당 디렉터리 rsync로 내려갈 때 고려 중인 파일을 포함하고 다른 모든 항목은 제외해야 합니다. 마지막으로, rsync콘텐츠가 전혀 없는 디렉터리를 건너뛰도록 지시해야 합니다 .

rsync --dry-run -aiv --include '*/' --include '*state*' --include '*srm' --exclude '*' --prune-empty-dirs pi@retropie: retropie-backup/

두 경우 모두 --dry-run올바른 파일 세트를 선택했다고 확신하면 삭제하여 작업을 수행하십시오.

답변2

프로그램은 find원격 시스템에서 실행되어야 하며 구문이 올바르지 않다는 점을 제외하면 수행하려는 작업과 유사합니다. 백틱은 로컬 시스템에서만 명령을 실행할 수 있습니다. ssh이 작업을 수행하려면 원격 컴퓨터에 있어야 합니다 find.

ssh pi@retropie find ... >./filelist
rsync -v -files-from ./filelist pi@retropie: retropie-backup/

관련 정보