There are several tools for compressing and decompressing files in Linux, you can get a summary of these tools in this link. Zip is one of the utilities used for packaging, compressing (archive) and decompressing files.
Installation
1 2 | sudo apt-get update
sudo apt-get install zip unzip
|
Compress files
Compress files in a directory named tutorial –
1 2 3 4 5 6 7 8 | $ zip -r tutorial.zip tutorial/
adding: tutorial/ (stored 0%)
adding: tutorial /host .conf (deflated 13%)
adding: tutorial /hostname (stored 0%)
adding: tutorial /hosts .deny (deflated 44%)
adding: tutorial /hosts (deflated 35%)
adding: tutorial /hosts .allow (deflated 42%)
adding: tutorial /auth_sa .py (deflated 52%)
|
View contents of zip files, without uncompressing –
1 2 3 4 5 6 7 8 9 10 | $ zip -sf tutorial
Archive contains:
tutorial/
tutorial /host .conf
tutorial /hostname
tutorial /hosts .deny
tutorial /hosts
tutorial /hosts .allow
tutorial /auth_sa .py
Total 7 entries (2487 bytes)
|
Unzip or decompress
To decompress a zipped file, use the unzip command –
1 2 3 4 5 6 7 8 9 | $ unzip tutorial.zip
Archive: tutorial.zip
creating: tutorial/
inflating: tutorial /host .conf
extracting: tutorial /hostname
inflating: tutorial /hosts .deny
inflating: tutorial /hosts
inflating: tutorial /hosts .allow
inflating: tutorial /auth_sa .py
|
Search and compress
You can also combine find and zip command to search for certain types of files and compress those files in one command –
1 2 3 4 5 6 7 8 9 10 11 | $ find . - type f -name '*.conf' -print | zip confi-files -@
adding: host.conf (deflated 13%)
adding: colord.conf (deflated 50%)
adding: ntp.conf (deflated 56%)
$ zip -sf confi-files
Archive contains:
host.conf
colord.conf
ntp.conf
Total 3 entries (1858 bytes)
|
References -
https://linux.die.net/man/1/zip
Contents of most text files change during the life of the file , and it is common to find yourself trying to search and replace certain text across multiple files. In Linux, this is a fairly easy task. Let us go through some of the commands you will need to perform this task and then finally construct a single liner to do the job.
- grep is your best friend when it comes to finding a string in a file. In this case we are looking for the string “REPLACEME” in current directory and across multiple files –
1 2 3 4 5 | $ grep -r REPLACEME *
host.conf:
host.conf:order hosts,REPLACEME,bind
hostname :REPLACEME
hosts.deny:ALL: REPLACEME
|
If we are interested only in the files which contains this particular text –
1 2 3 4 | $ grep -lr REPLACEME *
host.conf
hostname
hosts.deny
|
- sed is a tool of choice for inline editing of files –
1 2 3 4 5 | $ cat data
This text will be replaced - REPLACEME
$ sed -i 's/REPLACEME/NEWTEXT/g' data
$ cat data
This text will be replaced - NEWTEXT
|
From here, there are multiple ways to skin the cat – we can loop through the files and do the replacement or we can let the commands do the replacement with a wildcard.
For loop style update -
1 2 3 4 5 6 7 8 9 10 11 12 | $ for f in $( grep -lr REPLACEME *); do echo "*** File: ${f} ***" ; sed -i 's/REPLACEME/NEWTEXT/g' $f; done
*** File: host.conf ***
*** File: hostname ***
*** File: hosts.deny ***
$ grep -lr REPLACEME *
$ grep -lr NEWTEXT *
data
host.conf
hostname
hosts.deny
|
Actually the above for loop is redundant, sed can make changes across multiple files –
1 | sed -i 's/REPLACEME/NEWTEXT/g' *
|