Unzip All Files In Subfolders Linux !new! 🆒 🏆
If a ZIP contains folders, they are created under the same parent. That’s usually desired, but be aware of name collisions.
It automates what would otherwise be a tedious manual task, processing hundreds of files in seconds. 2. Versatility
Note: This requires "globstar" to be enabled in your shell ( shopt -s globstar ). The $f%.* part creates a new folder named after the zip file, which keeps things very organized. Common "Gotchas" to Watch Out For
Using these automated command-line methods will drastically speed up your data management workflow on any Linux distribution. unzip all files in subfolders linux
find . -type f -name "*.zip" -print0 | xargs -0 -I {} -P 4 sh -c 'unzip -d "$(dirname "{}")" "{}"'
If you prefer plain shell logic, a for loop over the output of find works nicely:
If you’ve ever downloaded a large dataset, a batch of game mods, or a collection of ebooks on Linux, you’ve likely encountered the same frustrating scenario: a parent folder filled with dozens (or hundreds) of subfolders, each containing one or more .zip archives. Opening each subfolder, right-clicking, and extracting manually is tedious, error-prone, and completely against the Linux philosophy of automation. If a ZIP contains folders, they are created
cd /data/incoming find . -name "*.zip" -type f -exec sh -c ' base="$0%.zip" mkdir -p "$base" unzip -q "$0" -d "$base" ' {} \;
.. is a specific parallel positional token that automatically removes the extension, leaving the directory path and base name, effectively extracting the file into its parent subfolder. Safety Tips and Best Practices
Save the following as recursive_unzip.sh : Common "Gotchas" to Watch Out For Using these
sudo dnf install unzip # or yum install unzip
downloads/ ├── archive1.zip ├── subdir1/ │ ├── archive2.zip │ └── docs.zip └── subdir2/ ├── pictures.zip └── deep/ └── data.zip
If you want to automatically delete the original ZIP files only after a successful extraction, append an interactive or forced removal command:
find . -type f -name "*.zip" -exec unzip -d "$(dirname "{}")" "{}" \;