scp 또는 rsync와 함께 find를 사용하여 찾은 파일 보내기

scp 또는 rsync와 함께 find를 사용하여 찾은 파일 보내기

특수한 파일 형식을 검색하고 일단 발견되면 해당 파일과 디렉터리 구조를 원격 서버에 복사하는 간단한 명령을 실행하려고 합니다.

예를 들어:

find Source/ -name *.CR2 | xargs -d '\n' cp --parents -t /STORAGE/location/ 

이 경우 발견된 파일을 상위 폴더 구조를 가진 별도의 디렉터리에 복사합니다. rsync 또는 scp를 사용하여 동일한 작업을 수행하고 싶습니다.

나는 성공하지 못한 채 아래 코드를 사용하여 몇 가지 주장을 시도했습니다.

find /src/dir/ -name *.CR2 -printf %P\\0 \ | rsync -av -e ssh --files-from=- --from0 /src/dir/ remote@server:/Storage/

어떤 도움이라도 대단히 감사하겠습니다.

저는 수년간의 가족 사진을 정렬하고 있으며 zfs 배열의 한 디렉토리에서 사진을 찾아서 동일한 배열의 다른 위치에 다시 쓰는 대신(시간이 걸립니다) 해당 사진을 찾아서 다음으로 보내고 싶습니다. 별도의 기계가 유형별로 정렬하고 반복한 fdupes다음 반복하여 phockup날짜별로 정렬합니다. 실수할 경우를 대비해 원본 파일을 안전하게 보관하기 위해 이렇게 합니다.

편집: 내 질문에 답변해 주신 분에게 감사의 말씀을 전하고 싶습니다. 다행스럽게도 귀하가 답변하기 전에 해결책을 찾았지만 불행히도 해결책이 얼마나 느린지 몰랐습니다. 그래서 예전에 하던 방식대로 하기로 했어요.

이것은 나에게 맞는 코드입니다. 제대로 작동하려면 SSH 키 핸드오버가 필요하지만 각 파일에 비밀번호를 입력할 필요는 없습니다.

find Sorted/ -name *.JPG -exec rsync -a -e ssh --relative '{}' usr@remote:/1/2/3/ ';'

언급된 다른 제안 중 일부를 시도하고 더 빠른지 확인하려고 합니다. 그러나 현 상태에서는 백그라운드에서 실행되는 쉘 스크립트를 만드는 것으로 끝났습니다.

다시 한 번 감사드립니다!

답변1

find Source/ -type f -name '*.CR2' -print0 |
    rsync --dry-run -av --files-from - --from0 . remote@server:/Storage/

--dry-run계획한 작업이 만족스러우면 삭제하세요.

답변2

다음 명령을 사용할 수 있습니다

 find  path -type f -iname "filename" -exec scp {} destinationhost:/var/tmp/ \;

관련 정보