From owner-freebsd-ports Sun Aug 11 14:21:47 1996 Return-Path: owner-ports Received: (from root@localhost) by freefall.freebsd.org (8.7.5/8.7.3) id OAA13717 for ports-outgoing; Sun, 11 Aug 1996 14:21:47 -0700 (PDT) Received: from phoenix.volant.org (root@phoenix.volant.org [205.179.79.193]) by freefall.freebsd.org (8.7.5/8.7.3) with ESMTP id OAA13704 for ; Sun, 11 Aug 1996 14:21:38 -0700 (PDT) From: patl@asimov.volant.org Received: from asimov.volant.org (asimov.phoenix.volant.org [205.179.79.65]) by phoenix.volant.org (8.7.5/8.7.3) with SMTP id OAA07387; Sun, 11 Aug 1996 14:20:18 -0700 (PDT) Received: by asimov.volant.org (5.x/SMI-SVR4) id AA01482; Sun, 11 Aug 1996 14:22:42 -0700 Date: Sun, 11 Aug 1996 14:22:42 -0700 Message-Id: <9608112122.AA01482@asimov.volant.org> To: chuckr@glue.umd.edu Subject: Re: using tar Cc: FreeBSD-Ports@freebsd.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Content-Md5: EWoFktk0oRS8XN5dlmgBaA== Sender: owner-ports@freebsd.org X-Loop: FreeBSD.org Precedence: bulk |> > |> cd |> > |> tar cf - | ( cd ; tar xvfBp - ) |> > |> > An arguably better way to copy an entire directory tree within a single |> > machine is: |> > |> > cd |> > find . -depth -print | cpio -pdmv |> |> You aren't the first person to point that method out (Joerg told me about |> it too) but I hadn't had any argument about it being 'arguably better'. |> Could/would you expand on that? Hmm. It's been a couple of years since I switched over; and I no longer recall all of the reasons. I believe the most convincing ones involved the treatment of sparse filenames and very long pathnames, empty directories, device files, etc. (Most people don't realize that the traditional tar format has a filename length limit. According to the Solaris man page, the total length is 255 characters, with no more than 155 for the path and 100 for the filename. The FreeBSD man page doesn't mention limits; but FreeBSD uses GNU tar, which can use extended file formats.) Using a GNU tar pipe with appropriate options might work as well as the find|cpio pipe; but it would be a much more cumbersome command. Also, every byte of every file is read and written twice in the tar|tar pipe. (Each tar has both diskfile and pipe I/O.) In the find|cpio pipe only directories are actually read by the find; and only the filenames are passed through the pipe. That means fewer I/O operations and fewer context switches; for better performance. -Pat My opinions are my own. For a small royalty, they can be yours as well... Pat Lashley, Senior Software Engineer, Henry Davis Consulting patl@Phoenix.Volant.ORG http://Phoenix.Volant.ORG/