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と最大圧縮を使用してこれを行うには?

唯一の出力ファイルに加えて一時ファイルを生成することはお勧めできません。 180 GB FS で ~100 GB サイズのファイル/ディレクトリを圧縮する必要がある場合は、空き容量が不足しているためです (たとえば、ファイルを圧縮する場合は ~60,000 MB 必要)。

答え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が新しい既存のファイルをスキップして確認する方法を参照してください。これは強力です。あなたの仕事は扱われません。

芽@

関連情報