Linux archives

From Ever changing code
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

TAR, GZ, BZIP

Working with archives in linux where tar = tape archive and the most common used options are:

  • -c - create a new tar file
  • -x - extract file
  • -t - test list the contents of an archive
  • -z - compress use gzip compress, extention .tar.gz
  • -j - compress use bzip2 compress, extention .tar.bz2
  • -v - verbose displays files to compress or uncompress
  • -f - file specify the new archive name or an archive to extract from
  • -r - flag to append the additional files to the archive
  • -u - updating a file


Compress

Create a compressed .tar.gz archive

#archive a directory and everything under (recursively), the dir tree will be preserved eg. /dir/to/be/compressed/ when you extract
tar -czvf archive.tar.gz /dir/to/be/compressed/
tar -czvf archive.tar.gz /path/to/*.conf #archive only files matching *.conf


Create a compressed archive controlling directory tree structure

tar -czvf archive.tar.gz -C directory/level1/ .
# -C change current working directory
# .  archive all files from a current working directory, this way when you extract it will extract to to the current working dir


Compress each directory in current directory into separate zip

$ for i in */; do echo tar -czvf "${i%/}.tar.gz" "$i"; done #test
$ for i in */; do      tar -czvf "${i%/}.tar.gz" "$i"; done #run
$ for i in */; do rm -rf "$i"; done


Extract

Extract whole archive, use -t to test

tar -xzvf archive.tar.gz


A single file from compressed .tar.gz, use -t to test

tar -xzvf archive.tar.gz file_to_extract.log
tar  xvf  archive.tar --strip-components=1 -C anotherDirectory/ file_to_extract.log
# --strip-components=NUMBER Strip NUMBER leading components/directories from file names on extraction


A single directory (here conf directory) to specific directory (here /tmp/logs from compressed .tar.gz, use -t to test

tar -xzvf archive.tar.gz conf -C /tmp/logs


Preview files inside archive
tar -tzvf {.tar.gz}
tar -tjvf {.tbz2}


Extract multiple archives at once
for file in *.tar.gz; do tar -xzvf "$file"; done
cat *.tar.gz | tar -xzvf - -i # -i, --ignore-zeros - ignore blocks of zeros in archive (normally mean EOF)

Zip

Install zip and unzip then use interactive method:

Extract using default options, retaining directory structure, if password protected you will be prompted
unzip file.zip 
Enter password: *** # <- only when password protected
Compress file or directory
zip name.zip directory/*
zip name.zip file1 file2 file3

# Encrypted password protected zip
zip --encrypt secure.zip file1 file2
Enter password: ***
Verify password: ***
  adding: file (deflated 8%)

# Create an encrypted ZIP archive from a folder /var/log/
zip --encrypt -r secure.zip /var/log/


Warning! The standard ZIP encryption is very weak and could be cracked easily.


Compress each directory in current directory into separate zip

$ for file in */; do echo zip -r "${file%/}.zip" "$file"; done # Test
$ for file in */; do      zip -r "${file%/}.zip" "$file"; done # Run