I have some directories (linux machine) full of highly compressible *.foo files.

Right now I just have a script that does gzip *.foo and it gzips each file into its own .gz file, and removes the original. 7z will compress these files to half the size that gzip will, so I'd like to switch to that.

How can I use 7z to start with a directory like this

file1.foo
file2.foo
file3.foo

and end up with

file1.foo.7z
file2.foo.7z
file3.foo.7z

Or similar. I don't want all of the files in one .7z archive.

link|improve this question

80% accept rate
feedback

2 Answers

up vote 2 down vote accepted
for i in *.foo; do 7za a $i.7z $i; if [ $? -eq 0 ]; then rm $i; fi; done
link|improve this answer
1  
Simplified: for i in *.foo; do 7za a $i.7z $i && rm $i; done – Dennis Williamson Feb 1 '11 at 21:10
Correct! thanks a bunch! – LVLAaron Feb 1 '11 at 21:33
feedback

Give this a try:

find -type f -maxdepth 1 -name "*.foo" -print0 | xargs -0 -I % 7z a %.7z %

but that will leave the original file after it's compressed.

link|improve this answer
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.