Stop letting your bash scripts lose their mind over weird filenames
Shell Scripting / Bash Tricks
Stop letting your bash scripts lose their mind over weird filenames
🧩 The Challenge
You finally write a script to move your backup files, but it hits one file with a space in the name and everything blows up. I’ve wasted hours debugging why a simple loop decided to treat “backup 01.tar.gz” as two separate files.
💡 The Fix
Use a null-delimited stream so your loop treats filenames as atomic units instead of guessing where the spaces are. It keeps your scripts from choking on the messy reality of user-generated file names.
find . -maxdepth 1 -name "*.tar.gz" -print0 | while IFS= read -r -d '' file; do
echo "Processing $file"
done
⚙️ Why It Works
By telling find to output a null character instead of a newline, you force the shell to respect the full filename regardless of what spaces or special characters are hiding inside it. The -d ” flag tells read to stop only at that null character, making your loop bulletproof.
🚀 Pro-Tip: Always double-quote your variables inside the loop or you’re just asking for trouble again.
Linux Tips & Tricks | © ngelinux.com | 10/26/2026
