← All cheat sheets

TAR COMMAND

Plain-text reference · 7 KB. Read it, search it (Ctrl-F) or print it.

BASIC SYNTAX#

tar [options] [archive-file] [files/directories]

# Key options
-c      Create archive
-x      Extract archive
-t      List contents
-v      Verbose output
-f      Specify filename
-z      Gzip compression
-j      Bzip2 compression
-J      XZ compression

CREATE ARCHIVES#

tar -cvf archive.tar files/           # Create tar archive
tar -cvf archive.tar file1 file2      # Multiple files
tar -cvf archive.tar /path/to/dir     # Archive directory
tar -cvf archive.tar .                 # Current directory
tar -cvf archive.tar *                 # All files in current dir

# With compression
tar -czvf archive.tar.gz files/       # Gzip compressed
tar -cjvf archive.tar.bz2 files/      # Bzip2 compressed
tar -cJvf archive.tar.xz files/       # XZ compressed

# Without leading directory path
tar -cvf archive.tar -C /path/to/dir .

EXTRACT ARCHIVES#

tar -xvf archive.tar                  # Extract tar
tar -xvf archive.tar -C /destination  # Extract to directory
tar -xzvf archive.tar.gz              # Extract gzip
tar -xjvf archive.tar.bz2             # Extract bzip2
tar -xJvf archive.tar.xz              # Extract xz

# Auto-detect compression
tar -xvf archive.tar.gz               # Modern tar auto-detects
tar -xvf archive.tar.bz2
tar -xvf archive.tar.xz

# Extract specific files
tar -xvf archive.tar file.txt         # Single file
tar -xvf archive.tar "*.txt"          # Pattern match
tar -xvf archive.tar dir/             # Specific directory

# Extract with strip (remove leading directories)
tar -xvf archive.tar --strip-components=1

LIST CONTENTS#

tar -tvf archive.tar                  # List all contents
tar -tvf archive.tar.gz               # List gzip archive
tar -tvf archive.tar | grep pattern   # Search in listing
tar -tvf archive.tar "*.txt"          # List specific pattern

APPEND TO ARCHIVE#

tar -rvf archive.tar newfile.txt      # Append file
tar -rvf archive.tar newdir/          # Append directory
# Note: Cannot append to compressed archives

UPDATE ARCHIVE#

tar -uvf archive.tar files/           # Update only newer files
# Note: Cannot update compressed archives

DELETE FROM ARCHIVE#

tar --delete -f archive.tar file.txt  # Delete file from archive
# Note: Cannot delete from compressed archives

COMPRESSION OPTIONS#

# Gzip (good balance of speed/compression)
tar -czvf archive.tar.gz files/
tar -xzvf archive.tar.gz

# Bzip2 (better compression, slower)
tar -cjvf archive.tar.bz2 files/
tar -xjvf archive.tar.bz2

# XZ (best compression, slowest)
tar -cJvf archive.tar.xz files/
tar -xJvf archive.tar.xz

# Zstd (fast with good compression)
tar -I zstd -cvf archive.tar.zst files/
tar -I zstd -xvf archive.tar.zst

# Specify compression level
tar -cvf - files/ | gzip -9 > archive.tar.gz     # Max gzip
tar -cvf - files/ | bzip2 -9 > archive.tar.bz2   # Max bzip2
tar -cvf - files/ | xz -9 > archive.tar.xz       # Max xz

EXCLUDE FILES#

tar -cvf archive.tar --exclude="*.log" dir/
tar -cvf archive.tar --exclude="node_modules" dir/
tar -cvf archive.tar --exclude-vcs dir/          # Exclude .git, .svn
tar -cvf archive.tar --exclude-vcs-ignores dir/  # Use .gitignore

# Multiple exclusions
tar -cvf archive.tar \
    --exclude="*.log" \
    --exclude="*.tmp" \
    --exclude="cache" \
    dir/

# Exclude from file
tar -cvf archive.tar -X exclude.txt dir/

PRESERVE ATTRIBUTES#

tar -cvpf archive.tar files/          # Preserve permissions
tar -cvf archive.tar --owner=root --group=root files/
tar -cvf archive.tar --numeric-owner files/
tar -cvf archive.tar --preserve-permissions files/
tar -cvf archive.tar --same-owner files/

# Full preservation (backup)
tar -cvpf archive.tar --acls --xattrs --selinux files/

INCREMENTAL BACKUPS#

# Create snapshot and first backup
tar -cvf backup-0.tar -g snapshot.file /data

# Incremental backup (only changed files)
tar -cvf backup-1.tar -g snapshot.file /data

# List incremental backup contents
tar -tvf backup-1.tar -g /dev/null

SPLIT LARGE ARCHIVES#

# Create split archive
tar -cvf - largedir/ | split -b 1G - archive.tar.part_

# Extract split archive
cat archive.tar.part_* | tar -xvf -

# With compression
tar -czvf - largedir/ | split -b 1G - archive.tar.gz.part_
cat archive.tar.gz.part_* | tar -xzvf -

REMOTE OPERATIONS#

# Archive and copy over SSH
tar -cvf - files/ | ssh user@host "cat > archive.tar"

# Extract from remote
ssh user@host "cat archive.tar" | tar -xvf -

# Archive and extract directly on remote
tar -cvf - files/ | ssh user@host "tar -xvf - -C /destination"

# With compression
tar -czvf - files/ | ssh user@host "tar -xzvf - -C /destination"

COMPARE ARCHIVES#

tar -dvf archive.tar                  # Compare archive with filesystem
tar --compare -f archive.tar          # Same as above

PROGRESS AND VERBOSE#

tar -cvvf archive.tar files/          # Extra verbose
tar -cvf archive.tar files/ --checkpoint=1000
tar -cvf archive.tar files/ --checkpoint-action=dot

# With pv for progress bar
tar -cf - files/ | pv | gzip > archive.tar.gz
pv archive.tar.gz | tar -xzf -

PRACTICAL EXAMPLES#

# Backup home directory
tar -czvf home_backup.tar.gz --exclude-vcs ~

# Backup with date
tar -czvf backup_$(date +%Y%m%d).tar.gz /data

# Extract single file
tar -xzvf archive.tar.gz path/to/file.txt

# View compressed file content without extracting
tar -xzOf archive.tar.gz path/to/file.txt

# Create archive of files from list
tar -cvf archive.tar -T filelist.txt

# Archive preserving hard links
tar -cvf archive.tar --hard-dereference files/

# Dry run (show what would be done)
tar -cvf /dev/null files/

# Extract overwriting existing files
tar -xvf archive.tar --overwrite

# Extract without overwriting
tar -xvf archive.tar --keep-old-files

# Extract newer files only
tar -xvf archive.tar --keep-newer-files

FILE EXTENSIONS#

.tar        Uncompressed tar archive
.tar.gz     Gzip compressed (also .tgz)
.tar.bz2    Bzip2 compressed (also .tbz, .tbz2)
.tar.xz     XZ compressed (also .txz)
.tar.zst    Zstd compressed
.tar.lz     Lzip compressed
.tar.lzma   LZMA compressed

TROUBLESHOOTING#

# Check archive integrity
gzip -t archive.tar.gz
bzip2 -t archive.tar.bz2
xz -t archive.tar.xz

# Repair truncated gzip archive
gzip -d < archive.tar.gz > recovered.tar 2>/dev/null

# Handle special characters in filenames
tar -cvf archive.tar --format=posix files/

# Verbose error output
tar -cvf archive.tar files/ 2>&1 | tee tar.log

QUICK REFERENCE#

tar -cvf archive.tar files/           # Create
tar -xvf archive.tar                  # Extract
tar -tvf archive.tar                  # List
tar -czvf archive.tar.gz files/       # Create + gzip
tar -xzvf archive.tar.gz              # Extract gzip
tar -cjvf archive.tar.bz2 files/      # Create + bzip2
tar -xjvf archive.tar.bz2             # Extract bzip2
tar -cJvf archive.tar.xz files/       # Create + xz
tar -xJvf archive.tar.xz              # Extract xz

Defensive reference on CyberRamen. Offensive / red-team sheets live on OffensiveRamen.com.