下载并自动安装tgz文件

时间:2012-07-30 14:49:26

标签: 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

我正在尝试创建一个shell脚本来下载并将muCommander解压缩到Mac上的应用程序目录。

我尝试了cd进入tmp目录,但是当我这样做时脚本停止了。 我可以使用-C参数提取所有内容,但是当前的tgz路径是muCommander-0_9_0 / mucommander.app,它可能会在以后的版本中更改,所以我试图保持它的通用性。

任何人都可以指点我出错的地方吗?

提前致谢。

2 个答案:

答案 0 :(得分:1)

从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.

更新

以下是一个有效的bash示例,说明如何将tgz文件的内容复制到/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

rm命令暂时被注释掉,在使用之前验证它没有任何危害。

答案 1 :(得分:1)

以下内容将更新您的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

请注意,'\'必须跟随新行,而不是任何空格......