Difference between revisions of "tar notes"

From Noah.org
Jump to navigationJump to search
Line 19: Line 19:
 
This will print and update message like "Wrote 27%". This will overwrite and update the current line.
 
This will print and update message like "Wrote 27%". This will overwrite and update the current line.
 
<pre>
 
<pre>
tar --blocking-factor=$(($(gzip --list -v tarball.tgz | sed -n -e "s/.*[[:space:]]\+[0-9]\+[[:space:]]\+\([0-9]\+\)[[:space:]].*$/\1/p") / 51200 + 1)) --checkpoint=1 --checkpoint-action='ttyout=Wrote %u%  \r' -zxf tarball.tgz
+
tar --blocking-factor=$(($(gzip --list tarball.tgz | sed -n -e "s/.*[[:space:]]\+[0-9]\+[[:space:]]\+\([0-9]\+\)[[:space:]].*$/\1/p") / 51200 + 1)) --checkpoint=1 --checkpoint-action='ttyout=Wrote %u%  \r' -zxf tarball.tgz
 
</pre>
 
</pre>
  
Line 27: Line 27:
 
{  
 
{  
 
     TARBALL=$1;
 
     TARBALL=$1;
     BLOCKING_FACTOR=$(($(gzip --list -v ${TARBALL} | sed -n -e "s/.*[[:space:]]\+[0-9]\+[[:space:]]\+\([0-9]\+\)[[:space:]].*$/\1/p") / 51200 + 1));
+
     BLOCKING_FACTOR=$(($(gzip --list ${TARBALL} | sed -n -e "s/.*[[:space:]]\+[0-9]\+[[:space:]]\+\([0-9]\+\)[[:space:]].*$/\1/p") / 51200 + 1));
 
     tar --blocking-factor=${BLOCKING_FACTOR} --checkpoint=1 --checkpoint-action='ttyout=Wrote %u%  \r' -zxf ${TARBALL}
 
     tar --blocking-factor=${BLOCKING_FACTOR} --checkpoint=1 --checkpoint-action='ttyout=Wrote %u%  \r' -zxf ${TARBALL}
 
}
 
}
Line 34: Line 34:
 
If you prefer the have the update message on a separate line then use this syntax:
 
If you prefer the have the update message on a separate line then use this syntax:
 
<pre>
 
<pre>
tar --blocking-factor=$(($(gzip --list -v tarball.tgz | sed -n -e "s/.*[[:space:]]\+[0-9]\+[[:space:]]\+\([0-9]\+\)[[:space:]].*$/\1/p") / 51200 + 1)) --checkpoint=1 --checkpoint-action='echo=Wrote %u%' -zxf tarball.tgz
+
tar --blocking-factor=$(($(gzip --list tarball.tgz | sed -n -e "s/.*[[:space:]]\+[0-9]\+[[:space:]]\+\([0-9]\+\)[[:space:]].*$/\1/p") / 51200 + 1)) --checkpoint=1 --checkpoint-action='echo=Wrote %u%' -zxf tarball.tgz
 
</pre>
 
</pre>

Revision as of 01:50, 24 August 2010


permission and ownership of files inside a tar

If you are making tarballs for installing on other machines you usually want the files inside the archive to be owned by root. Usually you do not build as root. You can force ownership and group with three arguments. This will record the UID and GID in the tar file as 0 (root).

tar --numeric-owner --owner=0 --group=0 -czf install_tree.tgz $STAGING_DIR

This is a fancier version that sets input and directories; trims the trailing slash off of STAGING_DIR; and sets the gzip compression level to the max.

GZIP="--best" tar --numeric-owner --owner=0 --group=0 --directory=${STAGING_DIR%/*} --exclude=.svn -czf ${OUTPUT_DIR##*/}/piebox_setup.tar.gz ${STAGING_DIR##*/}

show progress bar when decompressing tar

This will print and update message like "Wrote 27%". This will overwrite and update the current line.

tar --blocking-factor=$(($(gzip --list tarball.tgz | sed -n -e "s/.*[[:space:]]\+[0-9]\+[[:space:]]\+\([0-9]\+\)[[:space:]].*$/\1/p") / 51200 + 1)) --checkpoint=1 --checkpoint-action='ttyout=Wrote %u%  \r' -zxf tarball.tgz

This is a little easier to read as a shell function:

untar_progress () 
{ 
    TARBALL=$1;
    BLOCKING_FACTOR=$(($(gzip --list ${TARBALL} | sed -n -e "s/.*[[:space:]]\+[0-9]\+[[:space:]]\+\([0-9]\+\)[[:space:]].*$/\1/p") / 51200 + 1));
    tar --blocking-factor=${BLOCKING_FACTOR} --checkpoint=1 --checkpoint-action='ttyout=Wrote %u%  \r' -zxf ${TARBALL}
}

If you prefer the have the update message on a separate line then use this syntax:

tar --blocking-factor=$(($(gzip --list tarball.tgz | sed -n -e "s/.*[[:space:]]\+[0-9]\+[[:space:]]\+\([0-9]\+\)[[:space:]].*$/\1/p") / 51200 + 1)) --checkpoint=1 --checkpoint-action='echo=Wrote %u%' -zxf tarball.tgz