eml 파일이 포함된 폴더를 "A"에서 "B"로 보낸 다음 7z로 압축하고 내가 가지고 있는 것을 "A"로 다시 보내야 합니다.
ssh user@server "tar -cf - .folder" | 7z a -si compressed_folder.7z
하지만 tar.7z를 만들기 때문에 7z 아카이브를 만들기 전에 tar의 압축을 풀어야 합니다. 어떻게 해야 할까요?
추신. RAM과 CPU가 부족하기 때문에 "A"로 압축할 수 없습니다.
답변1
보기 흉하다고 약속하지만 테스트를 해보니 내 Linux 상자에서 작동합니다.
가정: 하나의 폴더만 백업하려고 하며(여러 폴더에 쉽게 적용할 수 없음) 클라이언트 측에서 아무 것도 덮어쓰지 않는다고 믿습니다. 폴더는 원격 서버의 홈 디렉터리에 있습니다. SSH에 대해 비밀번호 없는 인증을 설정하고 싶을 수도 있고, 그렇지 않으면 비밀번호를 두 번 입력해야 할 수도 있습니다.
경고: 이 작업을 수행하는 방법에는 OS별로 특이한 점이 있을 수 있습니다. 예를 들어, crontab을 수행하는 경우 경로를 보다 구체적으로 만들고 싶을 수 있습니다. 아마도 BSD를 사용하고 있으므로 bash
기본적으로 BSD가 없을 수도 있습니다 . 나는 date 명령을 사용하여 서버에 다시 업로드할 고유한 파일 이름을 생성하지만 호스트마다 다르게 작동할 수 있습니다. 여기에는 오류 검사도 없지만 스크립트에 쉽게 추가할 수 있습니다.
일을 단순화하기 위해 몇 가지 변수를 만들었습니다. $cssh 변수를 사용하면 SSH 연결 문자열을 반복할 필요가 없습니다. 폴더 이름을 test/로 변경했지만 한 번만 사용되므로 변수에 넣지 않았습니다.
bash
출력을 쉽게 억제할 수 있도록 or (보통 Linux에서는 상호 교환 가능) 으로 모두 래핑하고 있지만 sh
, 출력 억제에 관심이 없다면 이를 제거하고 길이를 다소 줄일 수 있습니다.
bash -c 'file=bu$(date +\%Y-\%m-\%d-\%Hh\%Mm\%Ss_\%A).7z; cssh="user@host"; folder=`ssh $cssh "tar -cf - test/ | gzip -9c" | gzip -d | tar -xvf - | head -n 1`; 7z a $file $folder && scp $file $cssh:~ && rm $file && rm -r $folder' > /dev/null 2>&1
사용이 ssh
어려운 요구 사항이고 원하지 않는 경우 ssh를 통해 파일을 복사하는 데 scp
사용할 수 있습니다 .dd
sh -c 'file=bu$(date +\%Y-\%m-\%d-\%Hh\%Mm\%Ss_\%A).7z; cssh="user@host"; folder=`ssh $cssh "tar -cf - test/ | gzip -9c" | gzip -d | tar -xvf - | head -n 1`; 7z a $file $folder && dd if=$file | ssh $cssh "dd of=$file" && rm $file && rm -r $folder' > /dev/null 2>&1
일반 텍스트 파일로 많은 대역폭을 절약할 수 있기 때문에 로컬 호스트로 스트리밍하기 전에 아카이브를 gzip으로 압축했습니다. 파이프를 제거할 수 있지만 gzip -9c
, 그렇게 하려면 로컬 호스트에서 해당 압축 해제를 제거해야 합니다.gzip -d
또는 더 명확하게 만들기 위해 첫 번째 명령을 스크립트에 넣으려면 다음을 수행하십시오.
#!/bin/sh
# make a unique file name to temporarily use for storing 7z'd folder
# will look something like bu2019-09-29-00h18m49s_Sunday.7z
file=bu$(date +\%Y-\%m-\%d-\%Hh\%Mm\%Ss_\%A).7z;
# SSH connection strong
cssh="user@host";
# downloads the remote folder and gets the name of the folder in one variable
folder=`ssh $cssh "tar -cf - test/ | gzip -9c" | gzip -d | tar -xvf - | head -n 1`;
# compress, upload, remove folder, remove file
7z a $file $folder && scp $file $cssh:~ && rm $file && rm -r $folder