For our Blog Visitor only Get Additional 3 Month Free + 10% OFF on TriAnnual Plan YSBLOG10
Grab the Deal

How to Unzip command in linux 2026-{Step by Step Guide}

The unzip command in Linux extracts files from .zip archives via the terminal. Use it to list, test, or extract archives, including password-protected zips. Typical usage is “unzip file.zip” or “unzip file.zip -d /path”. It’s lightweight, script-friendly, and available on most distributions via the “unzip” package.

If you’re working with compressed files on a server or local machine, the unzip command in Linux is a fast, reliable way to extract .zip archives. This guide covers installation, syntax, common options, real-world examples, security considerations, and troubleshooting—everything you need to confidently use unzip in production or development environments.

What Is the unzip Command in Linux?

unzip is a command-line utility that extracts and inspects .zip archives. It supports listing contents, verifying integrity, selective extraction, password-protected archives, and robust wildcard matching. It’s ideal for automation (shell scripts, CI/CD), remote servers via SSH, and quick terminal workflows where GUI tools aren’t available.

Most servers don’t include unzip by default. Install it with your package manager:

Debian/Ubuntu:

sudo apt update && sudo apt install -y unzip zip

RHEL/CentOS/AlmaLinux/Rocky:

sudo dnf install -y unzip zip
# older releases: sudo yum install -y unzip zip

Fedora:

sudo dnf install -y unzip zip

Arch/Manjaro:

sudo pacman -S unzip zip

Alpine:

sudo apk add unzip zip

Basic Syntax and Common Options

The basic syntax is simple:

unzip [options] archive.zip [file_pattern ...] -d target_directory

Quick Start: Extract a Zip

# Extract to current directory
unzip site_backup.zip

# Extract to a specific directory
unzip site_backup.zip -d /var/www/html

List Files Without Extracting (-l)

# Short listing
unzip -l site_backup.zip

# Verbose listing with attributes (-v shows more details)
unzip -v site_backup.zip

Test Archive Integrity (-t)

unzip -t site_backup.zip

This validates that the archive isn’t corrupted—useful for backups and CI/CD pipelines.

Control Overwrites (-n and -o)

By default, unzip prompts before overwriting existing files. Use:

# Never overwrite existing files
unzip -n site_backup.zip

# Overwrite existing files without prompting
unzip -o site_backup.zip

Selective Extraction with Patterns and Exclusions

# Extract only PHP files from public/ directory
unzip site_backup.zip "public/*.php" -d /var/www/html

# Exclude specific paths or file types (-x)
unzip site_backup.zip -x "*/node_modules/*" "*.log" -d /var/www/html

Quotes prevent your shell from interpreting wildcards, letting unzip handle patterns internally.

Password-Protected Archives (-P)

For encrypted zips, you can provide a password. Prefer interactive prompts in shared environments.

# Inline password (avoid in shared shells or history-enabled sessions)
unzip -P "StrongPassword" secrets.zip -d ~/secure

# Safer: omit -P and let unzip prompt for the password
unzip secrets.zip -d ~/secure

Preserve or Ignore Folder Structure (-j)

Use “junk paths” to flatten directories during extraction:

# Extract everything into one folder without subdirectories
unzip -j images.zip -d ./images_flat

Update vs. Freshen (-u and -f)

Useful for incremental deployments or syncing.

# Update: extract only files that are newer than existing ones or missing
unzip -u build.zip -d /var/www/app

# Freshen: update only files that already exist (don’t create new files)
unzip -f build.zip -d /var/www/app

Quiet and Non-Interactive Modes (-q, -o, -n)

For scripts and cron jobs, reduce noise and avoid prompts:

# Quiet + overwrite
unzip -q -o release.zip -d /opt/app

# Quiet + never overwrite
unzip -q -n assets.zip -d /opt/app/assets

Practical Examples and Real-World Use Cases

Batch Unzip Multiple Archives

If a directory contains many .zip files, automate extraction:

mkdir -p ~/archives/extracted
for z in ~/archives/*.zip; do
  [ -e "$z" ] || continue
  unzip -n "$z" -d ~/archives/extracted
done

Extract Only Logs or Specific File Types

# Only .log files
unzip logs_backup.zip "*.log" -d ./logs

# Only images from nested folders
unzip media.zip "*.png" "*.jpg" "*.webp" -d ./public/images

Recursive Unzip in Subdirectories

Unzip all archives found recursively under a path:

find /data/backups -type f -name "*.zip" -print0 | while IFS= read -r -d '' z; do
  unzip -n "$z" -d "${z%.zip}"
done

Handle Filenames with Spaces or Special Characters

# Quote file specs; use -O to set character encoding if needed
unzip -O UTF-8 "backup with spaces.zip" -d ./restore

Use the -O option when archives were created on systems with specific encodings.

List, Grep, and Filter Contents Before Extracting

# Find a file in the archive without extracting
unzip -l app.zip | grep -i "config.php"

Permissions, Ownership, and Security Considerations

When extracting on servers, think about file permissions and security.

  • Ownership: unzip extracts as the current user. If deploying to web roots (e.g., /var/www), use a privileged account carefully or extract to a temp folder and move with correct ownership (chown -R www-data:www-data /var/www/html).
  • Permissions: unzip attempts to restore stored modes. You may need chmod after extraction to align with your security policy (e.g., files 0644, directories 0755).
  • Symlinks: Archives can contain symlinks. Extract only from trusted sources to avoid path traversal or unsafe link targets.
  • Environment: Avoid inlining passwords (-P) on multi-user systems; prefer interactive prompts or environment injection in CI with care.
  • Encoding: Use -O to specify filename encoding; mismatched encodings can create garbled filenames.

Troubleshooting Common unzip Errors

  • “End-of-central-directory signature not found”: The file is not a valid zip or is truncated. Re-download, verify checksum, or ensure you’re not pointing at a HTML error page saved as .zip.
  • “Cannot find or open file.zip”: Confirm the path and case sensitivity. Use absolute paths or cd to the correct directory.
  • “Skipping: file already exists; use -o to overwrite”: Add -o or -n per your desired behavior, or remove the destination first.
  • “Encrypted file: use -P to provide a password”: Supply a password or re-create the archive without encryption.
  • Multi-part archives (.z01, .z02… .zip): Ensure all parts are present in the same directory and run unzip on the .zip file.
  • Corruption/CRC errors: Try unzip -t first; if failing, request a fresh archive or attempt recovery with zip -FF (on the creator’s side).

Zip vs. tar.gz: Which Should You Use?

  • Use .zip when you need cross-platform compatibility (Windows/macOS/Linux), per-file compression, and easy GUI handling.
  • Use .tar.gz for Linux-native workflows, better compression ratios on large codebases, and preserving UNIX permissions and ownership in a single archive.
  • For server deployments, tar.gz is common, but .zip is perfectly fine—especially when collaborating with Windows users.

Automating unzip in CI/CD and Cron Jobs

Make extractions deterministic and safe in automation. Use non-interactive flags, ensure idempotency, and log results.

# Example: deploy build artifact quietly and overwrite
set -euo pipefail
ARTIFACT="/tmp/build.zip"
DEST="/var/www/app"

if unzip -t "$ARTIFACT" >/dev/null; then
  mkdir -p "$DEST"
  unzip -q -o "$ARTIFACT" -d "$DEST"
  find "$DEST" -type d -exec chmod 755 {} \;
  find "$DEST" -type f -exec chmod 644 {} \;
  chown -R www-data:www-data "$DEST"
  echo "Deployment complete."
else
  echo "Invalid artifact. Aborting." >&2
  exit 1
fi

For zero-downtime strategies, extract into a release directory and switch a symlink atomically after validation.

Advanced Tips and Less-Known Options

  • Preserve timestamps: unzip preserves stored timestamps; verify with ls -l.
  • Case sensitivity: Patterns are case-sensitive unless your system locale changes behavior; use character classes (e.g., “*.{JPG,jpg}”).
  • Funzip for streaming: funzip reads from stdin and writes decompressed data to stdout—handy in pipelines.
  • zipinfo for metadata: zipinfo -1 archive.zip prints a simple list of filenames.
  • Exclude multiple directories: combine -x with quoted globs to skip node_modules, vendor, or caches.

FAQs: unzip Command in Linux

How do I unzip a file in Linux to a specific directory?

Use the -d option. Example: unzip archive.zip -d /path/to/target. The target directory will be created if it doesn’t exist (when possible).

How can I unzip without overwriting existing files?

Use -n to “never overwrite.” For example: unzip -n archive.zip. To always overwrite without prompts, use -o.

How do I unzip a password-protected zip in Linux?

Run unzip archive.zip and enter the password when prompted. Or supply it with -P “password” (not recommended on shared systems due to shell history exposure).

How do I list the contents of a zip file without extracting?

Run unzip -l archive.zip for a concise list, or unzip -v archive.zip for verbose details like compression method and file sizes.

Can I extract only certain files or folders from a zip?

Yes. Specify patterns and exclusions. Examples: unzip app.zip “public/*.php” -d ./site or unzip app.zip -x “*/tests/*” “*.md”. Always quote patterns to let unzip process them.

What does “End-of-central-directory signature not found” mean?

The file is likely not a valid zip, is incomplete, or you downloaded an error page. Verify the URL, re-download, or check integrity with unzip -t and checksums.

Is unzip installed by default on Linux?

Not always. Install it via your package manager, e.g., sudo apt install unzip on Ubuntu/Debian or sudo dnf install unzip on Fedora/RHEL-based systems.

Final Words

Mastering the unzip command in Linux gives you fast, scriptable control over .zip archives—perfect for developers, sysadmins, and site owners. Whether you’re deploying to production, restoring backups, or automating CI/CD, the options above will help you extract safely and efficiently. For optimized hosting with SSH and reliable file operations, explore YouStable’s plans.

Prahlad Prajapati

Prahlad is a web hosting specialist and SEO-focused organic growth expert from India. Active in the digital space since 2019, he helps people grow their websites through clean, sustainable strategies. Passionate about learning and adapting fast, he believes small details create big success. Discover his insights on web hosting and SEO to elevate your online presence.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top