Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Downloading and automatically installing a tgz file

Tags:

bash

#!/bin/bash

mkdir /tmp
curl -O http://www.mucommander.com/download/nightly/mucommander-current.app.tar.gz /tmp/mucommander.tgz
tar -xvzf /tmp/mucommander.tgz */mucommander.app/*
cp -r /tmp/mucommander.app /Applications
rm -r /tmp

I'm trying to create a shell script to download and extract muCommander to my applications directory on a Mac.

I tried cd into the tmp dir, but then the script stops when I do that. I can extract all using the -C argument, but the current tgz path is muCommander-0_9_0/mucommander.app, which could change on later builds, so I'm trying to keep it generic.

Can anyone give me pointers where I'm going wrong?

Thanks in advance.

like image 768
user1563217 Avatar asked Dec 28 '25 03:12

user1563217


2 Answers

Strip the first path component when you untar the archive, from tar(1):

 --strip-components count
         (x mode only) Remove the specified number of leading path ele-
         ments.  Pathnames with fewer elements will be silently skipped.
         Note that the pathname is edited after checking inclusion/exclu-
         sion patterns but before security checks.

Update

Here is a working bash example of how to, fairly generically, copy the contents of the tgz file to /Applications.

shopt -s nocaseglob

TMPDIR=/tmp
APP=mucommander
TMPAPPDIR=$TMPDIR/$APP

mkdir -p $TMPAPPDIR

curl -o $TMPDIR/$APP.tgz http://www.mucommander.com/download/nightly/mucommander-current.app.tar.gz
tar --strip-components=1 -xvzf $APP.tgz -C $TMPAPPDIR
mv $TMPAPPDIR/${APP}* /Applications
# rm -rf $TMPAPPDIR $TMPDIR/$APP

The rm command is commented out for now, verify that it does no harm before you use it.

like image 162
Thor Avatar answered Dec 30 '25 17:12

Thor


The following will update your muCommander.

#for the safety, remove old temporary extraction from the /tmp
rm -rf /tmp/muCommander.app

#kill the running mucommander - you dont want replace the runnung app
ps -ef | grep ' /Applications/muCommander.app/' | grep -v grep | awk '{print $2}' | xargs kill

#download, extract, remove old, move new, open
#each command run only when the previous ended with success
curl http://www.mucommander.com/download/nightly/mucommander-current.app.tar.gz  |\
 tar -xzf - -C /tmp --strip-components=1 '*/muCommander.app' && \
 rm -rf /Applications/muCommander.app && \
 mv /tmp/muCommander.app /Applications && \
 open /Applications/muCommander.app

Beware, after the '\' must following new line, and not any spaces...

like image 27
jm666 Avatar answered Dec 30 '25 18:12

jm666



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!