Repack 7z files to zip files in linux
I have a directory with a lot of .7z files, I need to repack each of them as zip archive, how can I do this automatically on linux?
Use the following script and run it from the directory where your .7z
files are:
#!/bin/bash
TMPDIR=tempdir_$$
for x in `ls *.7z`; do
mkdir $TMPDIR
cd $TMPDIR
cp ../$x .
p7zip -d $x
zip -r ../${x%.7z}.zip *
cd ..
rm -rf $TMPDIR
done
This will leave your .7z
files where they are and create .zip
files with the same name.
The script copies the .7z
files into the temporary directory before extracting them because they normally are deleted after decompressing the files.
I've kept the script as simple as possible so you can easily figure out how it works.
The script will only work with .7z
files that have no spaces or other special characters in their name.
You could also simply use the arepack
tool that's part of the atool suite of tools. It's typically a yum install atool
or apt install atool
. You may also need to install the p7zip-full
and p7zip-rar
packages if they are not already installed. Once these are available you can simply do this:
$ arepack -e -F zip *.7z
This will convert all the .7z files as .zip files. You'll still need to delete the *.7z files, but that can be done simply like so:
$ rm -f *.7z
Additional arepack options
Options:
-e, --each execute command above for each file specified
-F, --format=EXT override archive format (see below)
-O, --format-option=OPT give specific options to the archiver
-D, --subdir always create subdirectory when extracting
-f, --force allow overwriting of local files
-q, --quiet decrease verbosity level by one
-v, --verbose increase verbosity level by one
-V, --verbosity=LEVEL specify verbosity (0, 1 or 2)
-p, --page send output through pager
-0, --null filenames from standard in are null-byte separated
-E, --explain explain what is being done by atool
-S, --simulate simulation mode - no filesystem changes are made
-o, --option=KEY=VALUE override a configuration option
--config=FILE load configuration defaults from file
Archive format (for --format) may be specified either as a
file extension ("tar.gz") or as "tar+gzip".