Difference between revisions of "Working with compressed files"

From LPTMS Wiki
Jump to: navigation, search
m (Created page with "Linux usually provides a couple of command piping gzip zgreg, zcat, zdiff, zless, zmore, zegrep,... Here is a simple extension of ''tail'' and ''head'' for zipped files, that yo...")
 
m
Line 1: Line 1:
 
Linux usually provides a couple of command piping gzip
 
Linux usually provides a couple of command piping gzip
  zgreg, zcat, zdiff, zless, zmore, zegrep,...
+
  zgrep, zcat, zdiff, zless, zmore, zegrep,...
 
Here is a simple extension of ''tail'' and ''head'' for zipped files, that you can call ''ztail'' and ''zhead'' (example is for tail, replace "tail" with "head" everywhere to get zhead) and add to your own /bin directory:
 
Here is a simple extension of ''tail'' and ''head'' for zipped files, that you can call ''ztail'' and ''zhead'' (example is for tail, replace "tail" with "head" everywhere to get zhead) and add to your own /bin directory:
 
<source lang="bash">
 
<source lang="bash">

Revision as of 15:07, 23 November 2011

Linux usually provides a couple of command piping gzip

zgrep, zcat, zdiff, zless, zmore, zegrep,...

Here is a simple extension of tail and head for zipped files, that you can call ztail and zhead (example is for tail, replace "tail" with "head" everywhere to get zhead) and add to your own /bin directory:

#!/bin/bash
PATH=${GZIP_BINDIR-'/bin'}:$PATH

usage="Usage: $0 [OPTIONS]... [FILES]...
Like 'tail', but operate on the uncompressed contents of any compressed FILEs.

Options are the same as for 'tail'."

case $1 in
--help)    exec echo "$usage";;
-h)        exec echo "$usage";;
esac

options=""
files=""
for i in $@; do
str="$i"
if test -f $i && [ ${str:(-3)} = ".gz" ]; then
    files=$files"$i "
else
    if [ ${str:0:1} = "-" ] && [ $str != "-v" ] && [ $str != "--verbose" ]; then
        options=$options"$i "
    elif [ $str != "-v" ] && [ $str != "--verbose" ]; then
        echo -ne "***Warning: $i is neither a regular zip file or a regular option***\n\n"
    fi
fi
done

for file in $files; do
    echo "==>"$file"<=="
    exec gzip -cd $file | tail $options
done