Working with compressed files

From LPTMS Wiki
Revision as of 11:21, 12 December 2011 by Roux (talk | contribs) (Undo revision 339 by Roux (talk))
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
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.

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:

Caution:

very basic version, works when the options starts with '-' so it works with '-n10' but fails with '-n 10'. Should be easily improved...

<source lang="bash">

  1. !/bin/bash
  1. This program is free software; you can redistribute it and/or modify
  2. it under the terms of the GNU General Public License as published by
  3. the Free Software Foundation; either version 2 of the License, or
  4. (at your option) any later version.
  1. This program is distributed in the hope that it will be useful,
  2. but WITHOUT ANY WARRANTY; without even the implied warranty of
  3. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  4. GNU General Public License for more details.
  1. You should have received a copy of the GNU General Public License along
  2. with this program; if not, write to the Free Software Foundation, Inc.,
  3. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  1. based on zless

PATH=${GZIP_BINDIR-'/bin'}:$PATH

version="ztail 0.1 Copyright (C) 2007, Free Software Foundation, Inc. <http://fsf.org/> This is free software. You may redistribute copies of it under the terms of the GNU General Public License <http://www.gnu.org/licenses/gpl.html>. There is NO WARRANTY, to the extent permitted by law.

Written by Guillaume Roux."

usage="Usage: $0 [OPTIONS]... [FILES]...

Same as the 'tail' command, 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";; --version) exec echo "$version";; esac

options="" count=0 for i in $@; do str="$i" if test -f $i && [ ${str:(-3)} = ".gz" ]; then

   files[++count]=$str

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

if [ $count -gt 0 ]; then

   if [ $count -eq 1 ]; then
       exec gzip -cd ${files[1]} | tail $options
   else
       for j in `seq 1 $count`; do
           echo "==>"${files[j]}"<=="
           exec gzip -cd ${files[j]} | tail $options
       done
   fi

else

   echo -ne "***Warning: no regular zip files given***\n\n"
   exec echo "$usage"

fi </source>