If you’ve got a directory with dozens of zipped or rar’d files, you can run a single command to unzip them all in one step, thanks to the power of the bash shell.
For this task, we’ll use bash’s for loop command structure. Replace <var> with a variable name, and <list> with either a command that outputs a list or an explicit list.
for <var> in <list>
You can run it on a single line with this syntax instead:
for <var> in <list>;do command $<var>;done
So if you want to unrar a list of files, you could use this command. You don’t necessarily need the quotes, but it helps when the filenames have spaces or something like that in them.
for f in *.rar;do unrar e “$f”;done
If you wanted to use 7zip to extract a list of files:
for f in *.001;do 7z e “$f”;done
Or if you wanted to unzip a list of files:
for f in *.zip;do unzip “$f”;done
You could even chain commands together if you wanted to. For instance, if all your zip files contained .txt files and you wanted to unzip them and then move the unzipped files to another directory:
for f in *.zip;do unzip “$f”;done; for f in *.txt;do mv “$f” /myfolder/;done
The bash shell is just so incredibly powerful… this doesn’t even tap the power, but it should give you a good idea of what is possible.
Programmer by day, geek by night, The Geek, also known as Lowell Heddings, spends all his free time bringing you fresh geekery on a daily basis. You can follow him on Google+ if you'd like.
- Published 05/28/07