Unzip All Files In Subfolders Linux «2027»
find . -name "*.zip" -type f -print0 | while IFS= read -r -d '' zipfile; do unzip -o "$zipfile" -d "$(dirname "$zipfile")" done Sometimes you don’t want to preserve the subfolder structure—you want all extracted files dumped into one folder (e.g., ~/extracted ):
echo "Done."
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. unzip all files in subfolders linux
#!/bin/bash # Usage: ./unzip-all.sh [directory] [--overwrite] [--delete] SEARCH_DIR="$1:-." OVERWRITE="" DELETE_AFTER=false
if [[ "$*" == "--delete" ]]; then DELETE_AFTER=true fi a batch of game mods
find . -name "*.zip" -exec unzip -t {} \; Imagine you downloaded a course bundle: ~/Downloads/course/ with subfolders week1/data.zip , week2/slides.zip , week3/exercises.zip . You want to extract each into its respective folder without overwriting existing files.
find . -name "*.zip" -type f | while read -r zipfile; do target_dir=$(dirname "$zipfile") unzip -o "$zipfile" -d "$target_dir" done This simple loop breaks if filenames contain newlines. For production scripts, use the -print0 and while IFS= read -r -d '' pattern: and extracting manually is tedious
find . -name "*.zip" -type f -print0 | xargs -0 -I {} sh -c 'unzip -o "{}" -d "$(dirname "{}")"' The -exec option runs unzip once per file. xargs groups multiple file paths into a single command, reducing process overhead. The -print0 and -0 handle filenames with spaces or special characters safely. Method 3: Pure Bash Loop (Most Readable) If you prefer clarity over brevity:
.png)