Pipelining with tar


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Pipelining with tar
# 1  
Old 10-06-2010
Pipelining with tar

Hello,
I am currently interning at a place and my job is to essentially learn UNIX. My supervisor gives me problems here and there to help guide me with my learning but for the most part I'm doing this all by self-teaching myself. Needless to say I have run into a few obstacles...for instance

-Create a *one* line command that, using tar, will collect the full /usr/local directory (you need to run this as root again) and copy the whole /usr/local structure under /opt
For example /usr/local/bin/hello will become /opt/local/bin/hello, etc.

I want this as follows:
1. /usr/local is collected by tar, but the output of this tar command is its stdout.
2. what you get from the previous stdout, you compress with gzip and send it to stdout again
3. get this output and decompress with gzip.
4. get this output and pipe to tar in a way that will extract the tree under /opt.

If anyone knows how I could go about doing this, please let me know, or at the very least point me in the right direction. What I've got so far (which could be completely wrong) is:

tar cvf - usr/local/ | gzip -c - | gunzip -c - | tar xvf -

in theory I feel like this should work (except for extracting the tree under /opt...i'm kinda stuck there) So if anyone knows or has a solution it would be greatly appreciated! and maybe help me out by explaining what is involve and maybe where I went wrong.

Thanks
# 2  
Old 10-06-2010
You're nearly there. Just use the -C /opt/ option for the last tar, to chdir into /opt before extraction. You might also want -C /opt in the first tar, so it doesn't add the whole path(you'd get usr/local/file instead of local/file out) You might also want to add the 'p' option to both tars to more strictly preserve permissions.

What is the point of the compression, though? If you're not storing it on disk inbetween creation and extraction, there's no disk space to save, making compression nothing but a waste of CPU time.

Really though the best way is to try it. Get yourself a shell and make some folders with a little junk in them and try and tar stuff back and forth until you get it working good enough to test for real.
This User Gave Thanks to Corona688 For This Post:
# 3  
Old 10-06-2010
Haha, damn I was close...if only I looked at the man page a little closer.

And ye, I asked my supervisor why he wanted to compress then decompress right away and he admitted that it is silly and useless right now but he said we'd be expanding on it later and doing stuff with it...not sure what but we'll see...haha.

and I am most definitely fooling around with junk directories and folders i've created to mess around and test things.

---------- Post updated at 02:43 PM ---------- Previous update was at 02:40 PM ----------

k so I'm getting a few errors...
when I type:
tar cvf - usr/local/ | gzip -c - | gunzip -c - | tar xvfC - /opt/

I get:
usr/local/
usr/local/bin/
usr/local/bin/hello/
usr/local/
tar: usr/local: Cannot mkdir: No such file or directory
usr/local/bin/
tar: usr/local/bin: Cannot mkdir: No such file or directory
usr/local/bin/hello/
tar: usr/local/bin/hello: Cannot mkdir: No such file or directory
tar: Exiting with failure status due to previous errors


I'm sure I've just got the wrong syntax or something but I keep messing around with it and I keep getting errors.

Thanks
# 4  
Old 10-06-2010
It's trying to extract it in /opt/ which won't work unless you're root. And if you're still testing don't do it as root! Stick in your home dir and test in there.

Your parameters don't look quite right.

Code:
tar cvf - usr/local/ | gzip -c - | gunzip -c - | tar -C opt/ -xvf -

By doing 'opt/' instead of '/opt/' you can test in an opt dir inside your current dir instead of stomping over /opt/ itself.
This User Gave Thanks to Corona688 For This Post:
# 5  
Old 10-06-2010
Oh I see now!
haha thanks, makes a lot more sense then what I had.

Thanks a bunch!
# 6  
Old 10-06-2010
tar is very old, like dd and a few others, before UNIX command structure gelled, and it writes a lot of nulls because it wants your tape records to be standard length. If you do not have tape records, use cpio, which is what scp -r and rcp -r use and which has a pass option. Once, I updated a whole subtree in Hong Kong from Nj over 56K WAN using:

(cd source; find ...|cpio ...)|gzip -9 | rsh remote_host "cd target;gunzip | cpio -u ..."

exact options vary. This is very like 'scp -Crp ....' I like the -c for control strings in characters (compress better and platform independent). Be careful of all the *cp -r options, as if the target already exists and is a dir, it puts source things beneath it, but if not, it creates it, so you tend to accidentally get dir1/dir1/..., easily fixed with a move, but just remember some *cp -r commands are not repeatable.
# 7  
Old 10-21-2010
Aight, I'm starting to see where my supervisor is going with the compressing and decompressing bit. I believe it's to compress the file then transfer through ssh and then uncompress on another machine. If I wanted to get a head start on that where should I start?
am I going to be using scp?
or is there a way for me to use "...| tar -C opt/" and replace the opt/ and refer to the directory of the local machine I am transfering the files to?
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. AIX

Tar - pre-checking before making the Tar file

Coming from this thread, just wondering if there is an option to check if the Tar of the files/directory will be without any file-errors without actually making the tar. Scenario: Let's say you have a directory of 20GB, but you don't have the space to make Tar file at the moment, and you want... (14 Replies)
Discussion started by: filosophizer
14 Replies

2. UNIX for Dummies Questions & Answers

Do I need to extract the entire tar file to confirm the tar folder is fine?

I would like to confirm my file.tar is been tar-ed correctly before I remove them. But I have very limited disc space to untar it. Can I just do the listing instead of actual extract it? Can I say confirm folder integrity if the listing is sucessful without problem? tar tvf file1.tar ... (1 Reply)
Discussion started by: vivien_chu
1 Replies

3. Shell Programming and Scripting

tar command to explore multiple layers of tar and tar.gz files

Hi all, I have a tar file and inside that tar file is a folder with additional tar.gz files. What I want to do is look inside the first tar file and then find the second tar file I'm looking for, look inside that tar.gz file to find a certain directory. I'm encountering issues by trying to... (1 Reply)
Discussion started by: bashnewbee
1 Replies

4. Shell Programming and Scripting

Bash pipelining

Hello, There is a symbolic link in a folder. I would like to read destination of this link and get base name of pointed file. Let's say, there is symlink : symlink -> ../file.txt. I can do that what I want by this script: readlink symlink | while read var do echo `basename $var` done but... (1 Reply)
Discussion started by: scdmb
1 Replies

5. UNIX for Dummies Questions & Answers

tar -cvf test.tar `find . -mtime -1 -type f` only tar 1 file

Hi all, 4 files are returned when i issue 'find . -mtime -1 -type f -ls'. ./ora_475244.aud ./ora_671958.aud ./ora_934052.aud ./ora_934050.aud However, when I issued the below command: tar -cvf test.tar `find . -mtime -1 -type f`, the tar file only contains the 1st file -... (2 Replies)
Discussion started by: ahSher
2 Replies

6. UNIX for Advanced & Expert Users

How to create a Tar of multiple Files in Unix and FTP the tar to Windows.

Hi, On my Unix Server in my directory, I have 70 files distributed in the following directories (which have several other files too). These files include C Source Files, Shell Script Source Files, Binary Files, Object Files. a) /usr/users/oracle/bin b) /usr/users/oracle... (1 Reply)
Discussion started by: marconi
1 Replies

7. UNIX for Advanced & Expert Users

Tar utility (untar a .tar file) on VxWorks

Hi All Can someone pls guide me if there any utility to compress file on windows & uncompress on vxworks I tried as - - compressed some folders on windows ... i created .tar ( to maintain directory structure ) and compressed to .gz format. - on VxWorks i have uncompressed it to .tar... (1 Reply)
Discussion started by: uday_01
1 Replies

8. Shell Programming and Scripting

Pipelining

My problem is more a question of how to do it more elegantly than how to do it at all. The problem: I have a pipeline which has to write to the screen AND to a logfile: proc1 | tee -a <logfile> What makes things difficult is i also need the return code of proc1. But proc1 | tee -a... (6 Replies)
Discussion started by: bakunin
6 Replies

9. UNIX for Advanced & Expert Users

Does tar do crc checking on a tape or tar file?

Trying to answer a question about whether tar table-of-contents is a good tool for verifying tape data. (1 Reply)
Discussion started by: tjlst15
1 Replies

10. Programming

Pipelining Processes

I am doing a program that will calculate the 199th fibonacci number using pipelines and multiple processes for each calculation. I have figured everything out except why none of the processes before the last one never execute the findfib() function; Our teacher gave us the pipeline code to... (3 Replies)
Discussion started by: Trivialnight
3 Replies
Login or Register to Ask a Question