find . -type f -name "*.zip" -print0 | xargs -0 -I {} -P 4 sh -c 'unzip -d "$(dirname "{}")" "{}"' (No prompts) find . -type f -name "*.zip" -execdir unzip -o {} \; Extract & Delete (Clean up space)
If you don't want to see the list of every file being printed to the screen, add the -q (quiet) flag:
She pressed it.
Use -q ( unzip -q ... ) to prevent the output from flooding your terminal.
If you are using the Zsh shell or have globstar enabled in Bash, you can use the built-in unzip wildcards without needing the find command. unzip '**/*.zip' Use code with caution. unzip all files in subfolders linux
If you have thousands of ZIP files, using + instead of \; groups the files together, which can speed up processing: find . -type f -name "*.zip" -execdir unzip {} + Use code with caution.
find . : Starts the search in the current directory ( . ) and recursively checks all subfolders.
find /target/parent -type f -name "*.zip" -execdir sh -c 'unzip -qo "$1" && rm -f "$1"' _ {} \;
This loop takes each filename, strips the .zip extension, and uses that as the destination directory. 3. Alternative: Using a Bash Function Use -q ( unzip -q
# Enable recursive globbing in Bash shopt -s globstar for file in **/*.zip; do if [ -f "$file" ]; then unzip -d "$(dirname "$file")" "$file" fi done # Optional: Disable globstar when finished shopt -u globstar Use code with caution.
Then run:
When keeping original tree intact and extracting into a separate root:
The most robust command to handle nested directories and various file names is: find . -name "*.zip" -exec unzip -o {} -d ./extracted \; 🔍 Technical Review unzip '**/*
Note: The && ensures that the rm command only fires if the unzip command completes with an exit code of 0 (success). 4. Speeding Up with Parallel Processing
The Linux unzip command is designed to handle one ZIP file at a time. It does have a built‑in “recursive” or “batch” flag. So if you have this directory structure:
Remember to always handle filenames with spaces (use -print0 + xargs -0 or quoting), decide whether you need to preserve or flatten directory structures, and test destructive operations (like auto‑deleting ZIPs) on a copy first.
Then she added the cleanup:
find . -type f -name "*.zip" -exec unzip {} -d /path/to/destination \; Use code with caution. 🔄 Method 2: Using a Bash Loop