Command linemediumBash

Tar Archive Operations

Create, extract, and manage tar archives with compression.

01

The problem

You need to create compressed backups or extract downloaded archives.

02

The solution

Bash
# Create tar archive
tar -cvf archive.tar file1 file2 dir1/
tar -cvf archive.tar .          # Current directory

# Create with gzip compression (.tar.gz)
tar -czvf archive.tar.gz files/
tar -czvf backup-$(date +%Y%m%d).tar.gz /path/to/backup

# Create with bzip2 compression (.tar.bz2)
tar -cjvf archive.tar.bz2 files/

# Create with xz compression (.tar.xz)
tar -cJvf archive.tar.xz files/

# Extract tar archive
tar -xvf archive.tar
tar -xvf archive.tar -C /target/dir  # Extract to directory

# Extract compressed archives
tar -xzvf archive.tar.gz
tar -xjvf archive.tar.bz2
tar -xJvf archive.tar.xz

# List contents without extracting
tar -tvf archive.tar
tar -tzvf archive.tar.gz

# Add files to existing archive
tar -rvf archive.tar newfile.txt

# Extract specific files
tar -xzvf archive.tar.gz file1.txt dir/file2.txt

# Exclude files/folders when creating
tar -czvf archive.tar.gz --exclude='*.log' --exclude='node_modules' .

# Create archive from stdin
tar -czf - file1.txt | ssh user@host "tar -xzf - -C /backup"

# Split large archive
tar -czvf - large_dir/ | split -b 2G - large_backup.tar.gz.part

# Combine and extract split archive
cat large_backup.tar.gz.part* | tar -xzvf -

# Verify archive integrity
tar -tzf archive.tar.gz > /dev/null && echo "Archive OK"

# Compare archive with filesystem
tar -df archive.tar.gz

# Preserve permissions (important for backups)
tar -cpzvf backup.tar.gz --same-owner /important/data

03

Put it to work

Example
# Backup website
tar -czvf website-backup-$(date +%Y%m%d).tar.gz /var/www/html/

# Extract downloaded source code
tar -xzvf package-1.0.tar.gz
cd package-1.0

# Create compressed log archive
tar -czvf logs-$(date +%Y-%m).tar.gz /var/log/*.log
# Then delete old logs

# Transfer directory via SSH
tar -czf - /local/data | ssh user@remote "tar -xzf - -C /remote/backup"

Worth knowing

Flags: c=create, x=extract, v=verbose, f=file, z=gzip, j=bzip2, J=xz. Use -p to preserve permissions. Test archives with -t before extraction.