rsync or even scp questions....

Jeremy Chadwick koitsu at FreeBSD.org
Sun Oct 12 08:49:32 UTC 2008


On Sun, Oct 12, 2008 at 09:42:38AM +0100, Matthew Seaman wrote:
> mdh wrote:
>> --- On Sat, 10/11/08, Gary Kline <kline at thought.org> wrote:
>>> 	On the Ubuntu computer I am /home/kline; on my main
>>> computer,
>>> 	my home is /usr/home/kline.   The following sh script
>>> worked
>>> 	perfected when my home on "tao" [FBSD] was
>>> /home/kline:
>>>
>>> P
>>> #!/bin/sh
>>>
>>> PWD=`pwd`;
>>> echo "This directory is [${PWD}]";
>>>
>>> scp -qrp  ${PWD}/* ethos:/${PWD}
>>> ###/usr/bin/scp -rqp -i /home/kline/.ssh/zeropasswd-id
>>> ${PWD}/* \ klin
>>> e at ethos:/${PWD}
>>>
>>> 	Question #1: is there any /bin/sh method of getting rid of
>>> the
>>> 	"/usr"?  I switch off between my two computers
>>> especially when
>>> 	get mucked up, as with my upgrade to kde4.  (Otherwise, I
>>> do
>>> 	backups of ~kline as well as other critical directories.)
>>>
>>> 	Is there a way of automatically using rsync rather that my
>>> 	kwik-and-dirty /bin/shell script?
>>>
>>> 	thanks, people,
>>>
>>> 	gary
>>
>> If what you wish to do is simply get rid of /usr in a string, you can use sed like so:
>> varWithoutUsr=`echo ${varWithUsr} |sed -e 's/\/usr//'`
>> After running this, where $varWithUsr is the variable containing a 
>> string like "/usr/home/blah", the variable $varWithoutUsr will be equal 
>> to "/home/blah".  I create simple scripts like this all the time to 
>> rename batches of files, for example.  
>>
>> The easier way is probably just to not specify a dir to scp's remote 
>> path though, since it defaults to the user's home directory.  
>
> Or, in anything resembling Bourne shell:
>
> varWithoutUsr=${varWithUsr#/usr}

And I'll take a moment to recommend Matthew's method, since it does not
involve fork()ing an additional process.

When writing shell scripts in general, it's best if you can avoid
spawning external processes for things which can be done easily
(keyword: easily!) within Bourne natively.  There's no harm in doing it
for more complex things, but fork() is somewhat expensive, and try to
imagine what will happen to those scripts if the system lacks process
table space, etc...  :-)  Best to try and make everything
"self-contained" if possible.

-- 
| Jeremy Chadwick                                jdc at parodius.com |
| Parodius Networking                       http://www.parodius.com/ |
| UNIX Systems Administrator                  Mountain View, CA, USA |
| Making life hard for others since 1977.              PGP: 4BD6C0CB |



More information about the freebsd-questions mailing list