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/