파일을 두 대상으로 효율적으로 전송

파일을 두 대상으로 효율적으로 전송

현재 백업 파일을 생성하고 다음 curl을 사용하여 원격 호스트로 보내고 있습니다.

tar -cvzf - ./folder | curl -u user:pwd ftp://example.com/folder/backup.tar.gz --ftp-create-dirs -T -

나도 보내고 싶다같은 파일다른 목적지~에같은 호스트(실제로 같은 폴더에 있지만 한 폴더에는 파일 이름에 날짜 스탬프가 있고 다른 폴더에는 없습니다.)

tar현재 나는 매번 다른 대상을 지정하여 위의 (및 포함된) 작업을 두 번 실행합니다 . 이는 분명히 괜찮지만 최적은 아닙니다.

출력을 "포크"하여 두 개의 다른 명령 tar으로 보낼 수 있습니까 ?curl

아니면 원격 호스트의 대역폭 측면에서 더 효율적일 수 있습니다. 파일을 호스트로 한 번 전송한 다음 해당 위치에 복사합니까?

답변1

teeClone stdout을 파일에 사용한 다음 curl첫 번째 파일이 완료된 후 두 번째 파일을 실행할 수 있습니다. 또는 매개변수를 변경하여 tar백업을 로컬 파일에 저장한 다음 두 curl프로세스를 실행하여 원격 호스트로 전송할 수도 있습니다. 두 솔루션 모두 대역폭, 속도 및 로컬 디스크 공간 측면에서 그리 좋지 않습니다.

가장 좋은 해결책은 파일을 한 번 전송한 다음 제자리에 복사하는 것입니다. 당신은 ssh그것을 사용할 수 있습니다공개키 인증curl사용자 비밀번호 노출을 피하고 원격 호스트에서 파일을 쉽게 복제하는 대신 :

tar -cvzf - ./folder | ssh -i ~user/.ssh/id_dsa [email protected] 'tee /folder/backup_datestamp.tar.gz | dd of=/folder/backup.tar.gz'

로컬 사용자가 없으면 localhost에서 개인 키 위치를 변경할 수 있습니다.사용자(그리고 성공적인 인증을 위해 공개 키를 원격 호스트에 복사하는 것을 잊지 마십시오). 원격 호스트의 명령에서 dd of=file1 ; cp file1 file2대신 사용할 수도 있습니다.tee

관련 정보