start page | rating of books | rating of authors | reviews | copyrights

UNIX Power Tools

UNIX Power ToolsSearch this book
Previous: 18.15 Copying Directory Trees with cp -r Chapter 18
Linking, Renaming, and Copying Files
Next: 19. Creating and Reading Archives
 

18.16 Copying Directory Trees with (tar | tar)

The tar ( 19.5 ) command isn't just for tape archives. It can copy files from disk to disk, too. And even if your computer has cp -r ( 18.15 ) , there are advantages to using tar .

The obvious way to copy directories with tar is to write them onto a tape archive with relative pathnames - then read back the tape and write it somewhere else on the disk. But tar can also write to a UNIX pipe - and read from a pipe. This looks like:

% 

reading-tar

 

|

 

writing-tar

with one trick: the writing-tar process has a different current directory ( 38.3 , 38.4 ) (the place where you want the copy made) than the reading-tar . To do that, run the writing-tar in a subshell ( 13.7 ) .

The argument(s) to the reading-tar can be directory(s) or file(s). Just be sure to use relative pathnames ( 14.2 ) that don't start with a slash - otherwise, the writing-tar will write the copies in the same place the originals came from!

"How about an example," you ask? Figure 18.2 has one. It copies from the directory /home/jane , with all its files and subdirectories. The copy is made in the directory /work/bkup/jane :

% 

mkdir /work/bkup/jane

 % 

cd /home/jane

 % 

tar cf - . | (cd /work/bkup/jane && tar xBf -)

The && operator ( 44.9 ) tells the shell to start tar xBf only if the previous command (the cd ) succeeded. That prevents tar writing files into the same directory it's reading from - if the destination directory isn't accessible or you flub its pathname. If your tar has a B (reblocking) option, use it to help be sure that the copy is made correctly. If your tar doesn't have a reblocking option, you can use this trick suggested by Chris Torek:

% 

tar cf - . | cat | (cd /work/backup/jane && tar xbf 1 -)

CAUTION: At least one tar version has a v (verbose) option that writes the verbose text to standard output instead of standard error ! ( 19.8 ) If your tar does that, don't use v on the reading-tar (the tar that feeds the pipe)-use v on the writing-tar .

You can use other options that your tar might have-like excluding files or directories ( 20.8 ) - on the reading-tar , too. Some gotchas:

Figure 18.2: Copying /home/jane to /work/bkup with tar

Figure 18.2

If your system has rsh ( 1.33 ) , you can run the writing-tar on a remote system. For example, to copy a directory to the computer named kumquat :

% 

rsh kumquat mkdir /work/bkup/jane

 % 

tar cf - . | rsh kumquat 'cd /work/bkup/jane && tar xBf -'

- JP


Previous: 18.15 Copying Directory Trees with cp -r UNIX Power Tools Next: 19. Creating and Reading Archives
18.15 Copying Directory Trees with cp -r Book Index 19. Creating and Reading Archives

The UNIX CD Bookshelf Navigation The UNIX CD BookshelfUNIX Power ToolsUNIX in a NutshellLearning the vi Editorsed & awkLearning the Korn ShellLearning the UNIX Operating System