7z를 사용하여 파이프를 통해 압축하는 방법은 무엇입니까?

7z를 사용하여 파이프를 통해 압축하는 방법은 무엇입니까?

나는 이것을 사용하여 안전하게 백업을 생성합니다(? - 정말 안전합니까? 좋은 비밀번호가 있습니까?):

# ENCRYPT
ORIGDIR="DIRECTORYNAMEHERE"; tar cvf - "${ORIGDIR}/" 2>/dev/null | gzip -9 - 2>/dev/null | openssl aes-256-cbc -salt -out "${ORIGDIR}.tar.gz.aes"

# DECRYPT
openssl aes-256-cbc -d -salt -in "ENCDIRECTORYNAMEHERE" | tar -xz -f -

묻다:하지만 7z 및 최대 압축을 사용하여 이를 수행하는 방법은 무엇입니까?

유일한 출력 파일 외에 임시 파일을 생성하는 것은 좋지 않습니다. 180GB FS에서 ~100GB 크기의 파일/디렉터리를 압축해야 하는 경우 여유 공간이 충분하지 않기 때문입니다(예: 파일을 압축하면 ~60,000MB 필요).

답변1

7z 매뉴얼 페이지에서는 다음과 같이 설명합니다.

-si    Read data from StdIn (eg: tar cf - directory | 7z a -si directory.tar.7z)

답변2

를 사용하려는 특별한 이유가 있습니까 7z, 아니면 단지 보다 더 나은 압축을 원합니까 gzip?

xz유틸리티는 (LZMA)와 동일한 압축 알고리즘을 사용 7z하며 gzip.

tar cvf ... | xz -9 | openssl ...

답변3

stdin에서 읽고 stdout에 쓰는 몇 가지 예:

echo "hello world" | 7z a .xz -si -so | xz -dc # hello world
echo "hello world" | 7z a .xz -si -so | wc -b # 64
echo "hello world" | 7z a .xz -si -so | 7z x -txz -si -so # hello world
7z x -so db.sql.xz | less # preview compressed database file
  • a아카이브를 만듭니다. 파일 이름이 필요합니다. .xz실제로 이름은 신경 쓰지 않기 때문에 아카이브 유형을 설정하는 데 파일 이름을 잘못 사용했습니다.
  • -si표준 입력에서 읽기
  • -so표준 출력에 쓰기
  • x-t구체화합니다. 파일 이름으로 아카이브를 생성하지 않으므로 유형도 지정해야 합니다.

답변4

모든 마스터 스크립트에 대한 원격 백업 준비 파일을 빠르게 생성합니다. 다음 명령을 사용합니다.

# Scripts backup
ls ~/*.sh | cpio -ov | 7z a -si ~/Documents/SCRIPT_BACKUP_30062017.cpio.7z
# Scripts restore
7z x -so ~/Documents/SCRIPT_BACKUP_30062017.cpio.7z | cpio -iv   

내가 "기본" 루트 디렉터리를 백업하지 않는 이유는 독점적으로 동기화하고 일부 디렉터리만 보내기 때문입니다. 복원 시 cpio가 어떻게 새로운 기존 파일을 건너뛰고 확인하는지 참고하세요. 이것은 강력합니다. 귀하의 작업은 다루어지지 않습니다.

싹@

관련 정보