jpskill.com
🛠️ 開発・MCP コミュニティ

tar-compression

tarやzipなどの圧縮・解凍コマンドを使い、ファイルのアーカイブ化やデータ圧縮、増分バックアップなどを効率的に行うSkill。

📜 元の英語説明(参考)

Archive and compression commands — tar, gzip, zip, zstd, xz, bzip2, 7z, and friends. Use when user mentions "tar", "gzip", "zip", "unzip", "compress", "extract", "archive", "bzip2", "xz", "zstd", "7z", "7zip", "rar", "pigz", "pbzip2", ".tar.gz", ".tgz", ".tar.xz", ".tar.zst", ".tar.bz2", "untar", "decompress", "incremental backup", "split archive", "parallel compression", "disk image", "dd", or working with compressed files.

🇯🇵 日本人クリエイター向け解説

一言でいうと

tarやzipなどの圧縮・解凍コマンドを使い、ファイルのアーカイブ化やデータ圧縮、増分バックアップなどを効率的に行うSkill。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o tar-compression.zip https://jpskill.com/download/6134.zip && unzip -o tar-compression.zip && rm tar-compression.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/6134.zip -OutFile "$d\tar-compression.zip"; Expand-Archive "$d\tar-compression.zip" -DestinationPath $d -Force; ri "$d\tar-compression.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して tar-compression.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → tar-compression フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-17
取得日時
2026-05-17
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

[スキル名] tar-compression

tarと圧縮

tarの基本 — 作成、展開、一覧表示

tar -cvf archive.tar dir/              # .tarを作成(圧縮なし)
tar -czvf archive.tar.gz dir/          # .tar.gzを作成(gzip)
tar -cjvf archive.tar.bz2 dir/        # .tar.bz2を作成(bzip2)
tar -cJvf archive.tar.xz dir/         # .tar.xzを作成(xz)
tar --zstd -cvf archive.tar.zst dir/  # .tar.zstを作成(zstd)
tar -xvf archive.tar               # 展開(圧縮形式を自動検出)
tar -xzvf archive.tar.gz           # 明示的にgzip
tar -xjvf archive.tar.bz2          # 明示的にbzip2
tar -xJvf archive.tar.xz           # 明示的にxz

最新のtarは展開時に圧縮形式を自動検出するため、tar -xvfはすべての形式で機能します。

tarフラグのリファレンス

フラグ 意味
-c アーカイブを作成する
-x アーカイブを展開する
-t 内容を一覧表示する(展開しない)
-r 既存のアーカイブにファイルを追加する(非圧縮の.tarのみ)
-u 更新 — アーカイブ内のファイルよりも新しいファイルのみを追加する
-v 詳細表示(ファイルを表示)
-f 次の引数がファイル名であることを示す — ファイル名の直前に置く必要があります
-z gzip圧縮
-j bzip2圧縮
-J xz圧縮
--zstd zstd圧縮
-C 操作前にディレクトリを変更する
-p パーミッションを保持する
-h シンボリックリンクをたどる(リンクではなくターゲットをアーカイブする)

-fはアーカイブ名の直前の最後のフラグでなければなりません。tar -cfv archive.tarは失敗します — tarはvという名前のファイルを探します。

追加、更新、除外

tar -rvf archive.tar newfile.txt           # 追加(非圧縮の.tarのみ)
tar -uvf archive.tar dir/                  # 新しいファイルのみを更新

tar -czvf archive.tar.gz dir/ --exclude='*.log' --exclude='.git'
tar -czvf archive.tar.gz dir/ --exclude-vcs          # .git, .svn, .hgをスキップ
tar -czvf archive.tar.gz dir/ --exclude-vcs-ignores   # .gitignoreも尊重
tar -czvf archive.tar.gz dir/ -X exclude.txt          # ファイルからのパターン

アーカイブの検査と部分的な展開

# 展開せずに検査
tar -tzvf archive.tar.gz                       # サイズ付きで全ファイルを一覧表示
tar -tzvf archive.tar.gz | grep pattern        # 特定のファイルを検索
tar -tzvf archive.tar.gz --wildcards '*.conf'  # マッチするファイルを一覧表示 (GNU tar)

# 特定のファイルまたはディレクトリを展開
tar -xzvf archive.tar.gz path/to/file.txt      # 1つのファイルを展開
tar -xzvf archive.tar.gz dir/subdir/           # 1つのディレクトリを展開
tar -xzvf archive.tar.gz --wildcards '*.conf'  # パターンで展開 (GNU tar)
tar -xzvf archive.tar.gz -C /target/dir/       # 特定のディレクトリに展開
tar -xzvf archive.tar.gz --strip-components=1  # トップレベルディレクトリを削除

パーミッション、所有権、シンボリックリンクの保持

# 完全な保持(システムバックアップ、rootとして実行)
tar -cpzvf archive.tar.gz --same-owner dir/

# リンクを保存する代わりにシンボリックリンクをたどる
tar -chzvf archive.tar.gz dir/

# 所有権を保持して復元(rootが必要)
tar -xpzvf archive.tar.gz --same-owner -C /restore/

# アーカイブとファイルシステムを比較(変更点を確認)
tar -dvf archive.tar dir/

macOSでは、--same-ownerはrootの場合のデフォルトです。GNU/Linuxでは、明示的に指定してください。

圧縮アルゴリズムの比較

ツール フラグ 拡張子 速度 圧縮率 並列ツール
gzip -z .tar.gz 速い 良い pigz
bzip2 -j .tar.bz2 遅い より良い pbzip2
xz -J .tar.xz 非常に遅い 最高 pxz / pixz
zstd --zstd .tar.zst 非常に速い より良い built-in -T
lz4 --use-compress-program=lz4 .tar.lz4 最速 低い built-in

おおよそのベンチマーク(1 GBの混合データ、シングルコア):

ツール 圧縮時間 解凍時間 圧縮後のサイズ
lz4 ~2秒 ~0.5秒 元の約55%
zstd -1 ~3秒 ~1秒 ~42%
gzip -6 ~12秒 ~3秒 ~36%
zstd -19 ~90秒 ~1秒 ~30%
xz -6 ~120秒 ~8秒 ~28%

経験則:クイックバックアップ → gzip/zstd。ソース配布 → xz。汎用 → zstd。リアルタイム → lz4。bzip2 → レガシー、スキップしてください。

gzip / gunzip

gzip file.txt              # file.txt.gzに圧縮、元のファイルは削除
gzip -k file.txt           # 元のファイルを保持
gunzip file.txt.gz         # 解凍
gzip -9 file.txt           # 最大圧縮(1=高速、9=最高)
gzip -l file.txt.gz        # 圧縮率を表示
zcat file.txt.gz           # 標準出力に解凍

zstd (最新の圧縮)

zstd file.txt                  # 圧縮 -> file.txt.zst (デフォルトレベル3)
zstd -d file.txt.zst           # 解凍
zstd -19 file.txt              # 最大標準圧縮 (1-19)
zstd --ultra -22 file.txt      # ウルトラモード (20-22, --ultraが必要)
zstd --fast file.txt           # 圧縮率よりも速度を優先
zstd -T0 file.txt              # 全てのCPUコアを使用
zstd --long file.txt           # 大きなファイルでより良い圧縮率のために大きなウィンドウを使用

ディクショナリ圧縮(多くの類似した小さなファイル)

zstd --train samples/* -o mydict.zst          # サンプルから学習
zstd -D mydict.zst file.txt -o file.txt.zst   # ディクショナリで圧縮
zstd -d -D mydict.zst file.txt.zst             # ディクショナリで解凍

構造的に類似した小さなファイル(ログ、JSON、設定ファイル)で圧縮率を2〜5倍向上させます。

ストリーミング

mysqldump mydb | zstd -T0 > dump.sql.zst
zstd -d < dump.sql.zst | mysql mydb
tar -cf - dir/ | pv | zstd -T0 > archive.tar.zst

並列圧縮 (pigz, pbzip2, pxz)

# pigz — 並列gzip (ドロップインリプレースメント)
tar -cf - dir/ | pigz -p 8 > archive.tar.gz
pigz -d archive.tar.gz

# pbzip2 — 並列bzip2
tar -cf - dir/ | pbzip2 -p8 > archive.tar.bz2

# pxz — 並列xz
tar -cf - dir/ | pxz -T 8 > archive.tar.xz

# --use-compress-programによるtarとの統合
tar -cf archive.tar.gz --use-compress-program='pigz -9' dir/
tar -xf archive.tar.gz
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

tar and compression

tar basics — create, extract, list

tar -cvf archive.tar dir/              # create .tar (no compression)
tar -czvf archive.tar.gz dir/          # create .tar.gz (gzip)
tar -cjvf archive.tar.bz2 dir/        # create .tar.bz2 (bzip2)
tar -cJvf archive.tar.xz dir/         # create .tar.xz (xz)
tar --zstd -cvf archive.tar.zst dir/  # create .tar.zst (zstd)
tar -xvf archive.tar               # extract (auto-detects compression)
tar -xzvf archive.tar.gz           # explicit gzip
tar -xjvf archive.tar.bz2          # explicit bzip2
tar -xJvf archive.tar.xz           # explicit xz

Modern tar auto-detects compression on extraction, so tar -xvf works for all formats.

tar flags reference

Flag Meaning
-c Create archive
-x Extract archive
-t List contents (don't extract)
-r Append files to existing archive (uncompressed .tar only)
-u Update — append only files newer than what's in archive
-v Verbose (show files)
-f Next argument is the filename — must come last before the filename
-z gzip compression
-j bzip2 compression
-J xz compression
--zstd zstd compression
-C Change to directory before operating
-p Preserve permissions
-h Follow symlinks (archive the target, not the link)

-f must be the last flag before the archive name. tar -cfv archive.tar fails — tar looks for a file named v.

Append, update, exclude

tar -rvf archive.tar newfile.txt           # append (uncompressed .tar only)
tar -uvf archive.tar dir/                  # update only newer files

tar -czvf archive.tar.gz dir/ --exclude='*.log' --exclude='.git'
tar -czvf archive.tar.gz dir/ --exclude-vcs          # skip .git, .svn, .hg
tar -czvf archive.tar.gz dir/ --exclude-vcs-ignores   # also honor .gitignore
tar -czvf archive.tar.gz dir/ -X exclude.txt          # patterns from file

Archive inspection and partial extraction

# Inspect without extracting
tar -tzvf archive.tar.gz                       # list all files with sizes
tar -tzvf archive.tar.gz | grep pattern        # find specific files
tar -tzvf archive.tar.gz --wildcards '*.conf'  # list matching files (GNU tar)

# Extract specific files or directories
tar -xzvf archive.tar.gz path/to/file.txt      # extract one file
tar -xzvf archive.tar.gz dir/subdir/           # extract one directory
tar -xzvf archive.tar.gz --wildcards '*.conf'  # extract by pattern (GNU tar)
tar -xzvf archive.tar.gz -C /target/dir/       # extract to specific directory
tar -xzvf archive.tar.gz --strip-components=1  # strip top-level directory

Preserving permissions, ownership, symlinks

# Full preservation (system backups, run as root)
tar -cpzvf archive.tar.gz --same-owner dir/

# Follow symlinks instead of storing links
tar -chzvf archive.tar.gz dir/

# Restore with ownership (requires root)
tar -xpzvf archive.tar.gz --same-owner -C /restore/

# Compare archive to filesystem (check what changed)
tar -dvf archive.tar dir/

On macOS, --same-owner is default for root. On GNU/Linux, specify it explicitly.

Compression algorithms compared

Tool Flag Ext Speed Ratio Parallel tool
gzip -z .tar.gz Fast Good pigz
bzip2 -j .tar.bz2 Slow Better pbzip2
xz -J .tar.xz Very slow Best pxz / pixz
zstd --zstd .tar.zst Very fast Better built-in -T
lz4 --use-compress-program=lz4 .tar.lz4 Fastest Lower built-in

Rough benchmarks (1 GB mixed data, single core):

Tool Compress Decompress Compressed size
lz4 ~2s ~0.5s ~55% of original
zstd -1 ~3s ~1s ~42%
gzip -6 ~12s ~3s ~36%
zstd -19 ~90s ~1s ~30%
xz -6 ~120s ~8s ~28%

Rule of thumb: quick backup → gzip/zstd. Source distribution → xz. General purpose → zstd. Real-time → lz4. bzip2 → legacy, skip it.

gzip / gunzip

gzip file.txt              # compress to file.txt.gz, removes original
gzip -k file.txt           # keep original
gunzip file.txt.gz         # decompress
gzip -9 file.txt           # max compression (1=fast, 9=best)
gzip -l file.txt.gz        # show compression ratio
zcat file.txt.gz           # decompress to stdout

zstd (modern compression)

zstd file.txt                  # compress -> file.txt.zst (default level 3)
zstd -d file.txt.zst           # decompress
zstd -19 file.txt              # max standard compression (1-19)
zstd --ultra -22 file.txt      # ultra mode (20-22, needs --ultra)
zstd --fast file.txt           # speed over ratio
zstd -T0 file.txt              # use all CPU cores
zstd --long file.txt           # larger window for better ratio on large files

Dictionary compression (many small similar files)

zstd --train samples/* -o mydict.zst          # train from samples
zstd -D mydict.zst file.txt -o file.txt.zst   # compress with dictionary
zstd -d -D mydict.zst file.txt.zst             # decompress with dictionary

Improves ratio 2-5x on small, structurally similar files (logs, JSON, configs).

Streaming

mysqldump mydb | zstd -T0 > dump.sql.zst
zstd -d < dump.sql.zst | mysql mydb
tar -cf - dir/ | pv | zstd -T0 > archive.tar.zst

Parallel compression (pigz, pbzip2, pxz)

# pigz — parallel gzip (drop-in replacement)
tar -cf - dir/ | pigz -p 8 > archive.tar.gz
pigz -d archive.tar.gz

# pbzip2 — parallel bzip2
tar -cf - dir/ | pbzip2 -p8 > archive.tar.bz2

# pxz — parallel xz
tar -cf - dir/ | pxz -T 8 > archive.tar.xz

# tar integration via --use-compress-program
tar -cf archive.tar.gz --use-compress-program='pigz -9' dir/
tar -xf archive.tar.gz --use-compress-program='pigz -d' -C /target/

zip / unzip

zip archive.zip file1 file2             # create
zip -r archive.zip dir/                 # recursive (directories)
zip -r archive.zip dir/ -x '*.log'     # exclude pattern

unzip archive.zip                       # extract to current dir
unzip archive.zip -d /target/dir/       # extract to specific dir
unzip archive.zip file.txt              # extract one file
unzip -o archive.zip                    # overwrite without prompting
unzip -l archive.zip                    # list files and sizes
zipinfo archive.zip                     # detailed info
zip -u archive.zip updated-file.txt    # update changed files in archive

Password-protected zip

zip -e archive.zip file1 file2         # prompt for password
unzip -P 'mypass' archive.zip          # extract with password

zip's encryption (ZipCrypto) is weak. Use 7z with AES-256 for real security.

Split zip archives

zip -r -s 100m archive.zip dir/        # split at 100MB chunks
zip -s 0 archive.zip --out combined.zip # merge splits before extracting
unzip combined.zip

7z operations (p7zip / 7-Zip)

7z a archive.7z dir/                        # create .7z
7z a archive.7z dir/ -mx=9                  # ultra compression
7z a archive.7z dir/ -ms=on                 # solid mode (better compression)
7z a archive.7z dir/ -p'Pass' -mhe=on       # AES-256 encrypt contents + filenames
7z a -v100m archive.7z dir/                 # split into 100MB volumes

7z x archive.7z                             # extract preserving structure
7z e archive.7z                             # extract flat (no dirs)
7z x archive.7z -o/target/dir/              # extract to directory
7z l archive.7z                             # list contents
7z t archive.7z                             # test integrity

7z reads/writes: .7z, .zip, .tar, .gz, .bz2, .xz. Extracts .rar.

Piping tar over SSH

# Local to remote
tar -czvf - dir/ | ssh user@host 'tar -xzvf - -C /target/'

# Remote to local
ssh user@host 'tar -czvf - /remote/dir/' | tar -xzvf - -C /local/dir/

# With zstd for faster transfer
tar -cf - dir/ | zstd -T0 | ssh user@host 'zstd -d | tar -xf - -C /target/'

# With progress and bandwidth limit
tar -cf - dir/ | pv -L 10m | ssh user@host 'tar -xf - -C /target/'

Incremental backups with tar

# Level 0: full backup (creates snapshot file)
tar -czvf backup-full.tar.gz \
    --listed-incremental=/var/backups/snapshot.snar dir/

# Level 1: incremental (only changes since last backup)
tar -czvf backup-inc-$(date +%Y%m%d).tar.gz \
    --listed-incremental=/var/backups/snapshot.snar dir/

# Restore: apply full, then each incremental in order
tar -xzvf backup-full.tar.gz -C /restore/ --listed-incremental=/dev/null
tar -xzvf backup-inc-20260410.tar.gz -C /restore/ --listed-incremental=/dev/null

--listed-incremental=/dev/null during restore tells tar to extract everything. GNU tar only.

Split large archives

tar -czvf - dir/ | split -b 100m - archive.tar.gz.part-
cat archive.tar.gz.part-* | tar -xzvf -

Cross-platform: macOS vs GNU tar

Feature GNU tar (Linux) BSD tar (macOS)
--wildcards Required for patterns Default behavior
--exclude-vcs-ignores Supported Not supported
--zstd Supported Use --use-compress-program
--listed-incremental Supported Not supported
Extended attributes --xattrs Stored by default
# macOS: install GNU tar for full feature set
brew install gnu-tar    # use as 'gtar'

# macOS: zstd with BSD tar
tar -cf - dir/ | zstd > archive.tar.zst

# macOS: avoid resource fork ._* files
COPYFILE_DISABLE=1 tar -czvf archive.tar.gz dir/

Compression for specific use cases

# Logs (repetitive text, compresses 90%+)
gzip -9 app.log
find /var/log -name '*.log' -mtime +7 -exec gzip {} \;
zstd --train logs/*.log -o log-dict.zst && zstd -D log-dict.zst -19 app.log

# Database dumps
mysqldump mydb | zstd -T0 > mydb.sql.zst
pg_dump mydb | gzip -9 > mydb.sql.gz
pg_dump -Fc mydb > mydb.dump              # pg custom format (built-in compression)

# Source code distribution
tar -cJvf project.tar.xz --exclude-vcs project/
git archive --format=tar.gz HEAD > project.tar.gz

# Disk images
dd if=/dev/sda bs=4M status=progress | zstd -T0 > disk.img.zst
zstd -d < disk.img.zst | dd of=/dev/sda bs=4M status=progress
qemu-img convert -c -O qcow2 disk.raw disk.qcow2

Common patterns

# Backup with timestamp
tar -czvf "backup-$(date +%Y%m%d-%H%M%S).tar.gz" /path/to/dir/

# Dry run — see what would be extracted
tar -tzvf archive.tar.gz | head -20

# Find largest files in archive
tar -tzvf archive.tar.gz | sort -k3 -n -r | head -20

# Create archive from file list
tar -czvf archive.tar.gz -T filelist.txt

# Create archive excluding large files
find dir/ -size -10M | tar -czvf small-files.tar.gz -T -

# Verify archive integrity
gzip -t archive.tar.gz && echo "OK" || echo "CORRUPT"
xz -t archive.tar.xz
zstd -t archive.tar.zst