Difference between revisions of "Linux archives"

From Ever changing code
Jump to navigation Jump to search
 
(5 intermediate revisions by the same user not shown)
Line 10: Line 10:
*<code>-r</code> - flag to append the additional files to the archive
*<code>-r</code> - flag to append the additional files to the archive
*<code>-u</code> - ''updating'' a file
*<code>-u</code> - ''updating'' a file
===Compress===
 
 
;Compress
Create a compressed .tar.gz archive
Create a compressed .tar.gz archive
<source lang="bash">
<source lang="bash">
Line 17: Line 19:
tar -czvf archive.tar.gz /path/to/*.conf #archive only files matching *.conf
tar -czvf archive.tar.gz /path/to/*.conf #archive only files matching *.conf
</source>
</source>


Create a compressed archive controlling ''directory tree structure''
Create a compressed archive controlling ''directory tree structure''
Line 24: Line 27:
# .  archive all files from a current working directory, this way when you extract it will extract to to the current working dir
# .  archive all files from a current working directory, this way when you extract it will extract to to the current working dir
</source>
</source>


Compress each directory in current directory into separate zip
Compress each directory in current directory into separate zip
Line 32: Line 36:
</source>
</source>


===Extract===
 
Extract '''whole''' archive
;Extract
Extract '''whole''' archive, use <code>-t</code> to test
<source lang="bash">
<source lang="bash">
$ tar -xzvf archive.tar.gz
tar -xzvf archive.tar.gz
</source>
</source>
A '''single file''' from compressed .tar.gz  
 
 
A '''single file''' from compressed .tar.gz, use <code>-t</code> to test
<source lang="bash">
<source lang="bash">
$ tar -xzvf archive.tar.gz myscript.txt
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
</source>
</source>
A '''single directory''' (here '''conf''' directory) to specific directory (here '''/tmp/logs''' from compressed .tar.gz  
 
 
A '''single directory''' (here '''conf''' directory) to specific directory (here '''/tmp/logs''' from compressed .tar.gz, use <code>-t</code> to test
<source lang="bash">
<source lang="bash">
$ tar -xzvf archive.tar.gz conf -C /tmp/logs
tar -xzvf archive.tar.gz conf -C /tmp/logs
</source>
</source>


===Preview files inside archive===
 
tar -tzvf {.tar.gz}
;Preview files inside archive
tar -tjvf {.tbz2}
<source lang="bash">
tar -tzvf {.tar.gz}
tar -tjvf {.tbz2}
</source>
 
 
;Extract multiple archives at once
<source lang=bash>
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)
</source>


= Zip =
= Zip =
Install <tt>zip</tt> and <tt>unzip</tt> then use interactive method:
Install <tt>zip</tt> and <tt>unzip</tt> then use interactive method:
;Extract using default options, retaining directory structure
;Extract using default options, retaining directory structure, if password protected you will be prompted
<source lang="bash">
<source lang="bash">
unzip file.zip
unzip file.zip  
Enter password: *** # <- only when password protected
</source>
</source>
;Compress file or directory
;Compress file or directory
Line 60: Line 82:
zip name.zip directory/*
zip name.zip directory/*
zip name.zip file1 file2 file3
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/
</source>
</source>
<blockquote>Warning! The standard ZIP encryption is very weak and could be cracked easily. </blockquote>
Compress each directory in current directory into separate zip
Compress each directory in current directory into separate zip
<source lang="bash">
<source lang="bash">
$ for i in */; do echo zip -r "${i%/}.zip" "$i"; done # Test
$ for file in */; do echo zip -r "${file%/}.zip" "$file"; done # Test
$ for i in */; do      zip -r "${i%/}.zip" "$i"; done # Run
$ for file in */; do      zip -r "${file%/}.zip" "$file"; done # Run
</source>
</source>
[[Category:linux]]
[[Category:linux]]

Latest revision as of 12:22, 2 November 2021

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