3.8 KiB
7zip
The 7z file format uses a combination of various compression algorithms, with the primary one being LZMA (Lempel-Ziv-Markov chain algorithm). LZMA is known for its high compression ratio and fast decompression. Here is an overview:
-
LZMA/LZMA2: This is the default and most commonly used algorithm when creating 7z archives. LZMA2 is an improved version of LZMA, offering better multithreading support.
-
PPMd: Stands for Prediction by Partial Matching, which is good at compressing text data.
-
BCJ/BCJ2: These are Branch/Call/Jump conversion filters that pre-process executable files to improve compression.
-
DEFLATE: A widely used compression algorithm that is also used in ZIP file format.
-
BZip2: Another block-sorting compression algorithm that is particularly effective at compressing large text files.
Here are some technical details of LZMA/LZMA2, in case they are needed for advanced utilization:
-
Dictionary size: Highly customizable, allowing the compressor to store patterns, which can dramatically affect compression ratio and memory requirements.
-
Compression speed versus Decompression speed: These are adjustable; typically, LZMA offers slower compression speeds but fast decompression speeds.
-
Multi-threading support: LZMA2 in particular can utilize multiple processor cores to improve compression speed on modern computers.
For archival purposes using 7z, it is also possible to enable solid compression, which treats multiple files within the archive as a single data block for potentially better compression ratios.
Encryption algorithm : AES-256
Terminal
https://www.redhat.com/sysadmin/encrypting-decrypting-7zip
Encrypting
$ tar -cf directory.tar <directory>
$ 7z a -p -mhe=on directory.tar.7z directory.tar
or
7z a -pYourPassword -mhe=on directory.tar.7z directory.tar
Here a means adding files to archive
mhe=on means header encryption means metadata like file names will be encrypted too
For non interactive password typing type password just after -p with no space
also for level of compression
7z a path/to/archive.7z -mx=0|1|3|5|7|9 path/to/file_or_directory
0 means lowest compression while 9 being highest
for exluding directories
To exclude directories when creating a 7z archive, use the
-x switch with the ! wildcard operator, and add an r flag (for recursive) to the switch name if the directories might be in subfolders.
The basic syntax for creating an archive and excluding a specific directory named exclude_dir is:
7z a archive.7z source_dir/ -xr\!exclude_dir/
dont forget \ before ! as ! is reserved for events
Decrypting
7z x archive.7z
here x means extracting
mroe flags
-aoa: Overwrite All existing files without asking-aos: Skip extracting any files that already exist (prevents replacing).-aou: Auto-rename the extracted file (e.g., file_1.txt) if the target name exists.-aot: Auto-rename the existing file and extract the new one.
for splitting
7z a -v100m archive.7z my_folder/
for mass compression of folders
#!/bin/bash
# Check if 7z is installed
if ! command -v 7z &> /dev/null
then
echo "7z command not found! Please install 7zip."
exit 1
fi
# Loop through all directories in the current directory
for dir in */; do
# Make sure it's a directory
if [ -d "$dir" ]; then
# Remove the trailing slash from the directory name
dir_name=${dir%/}
# Create a .7z archive for each directory
echo "Creating archive for $dir_name..."
7z a "${dir_name}.7z" "$dir_name"
fi
done
echo "Done!"
to print only filepaths instead of other info
7z l -ba archive.7z | grep -oP '(?<=^.{53}).*'
from
https://stackoverflow.com/questions/55355466/7z-list-only-filenames
to list only top level use this
7z l -ba archive.7z | grep -oP '(?<=^.{53}).*' | grep -v '/'