如何从文件夹中删除版本号

时间:2015-06-02 21:39:19

标签: bash shell tar

我在这样的目录中构建了安装程序:

install-0.1.tar.gz  
install-0.2.tar.gz  
install-0.3.tar.gz

我想运行一个将其中一个tarball解压缩到一个文件夹中的行:

install  
install-0.1.tar.gz  
install-0.2.tar.gz  
install-0.3.tar.gz

解压缩和重命名文件夹是重要的一点。 谢谢你的帮助

4 个答案:

答案 0 :(得分:2)

假设tarball包含名为install的文件夹:

tar xzf install-<version>.tar.gz

如果它包含文件夹中的版本:

tar xzf install-<version>.tar.gz --transform='s/<version>//g'

答案 1 :(得分:1)

尝试覆盖角落案例的bash函数如下。

它不止一行,但这是因为它可以正确获取所有细节 - 查看目标是否已存在,检测包含多个目录的tarball等。

# this requires bash; if encapsulating in a script, use #!/bin/bash
unpack() {
  declare tempdir dest
  declare -a contents

  if [[ $2 ]]; then
    dest=$2
  elif [[ $1 = *-* ]]; then
    dest=${1%-*}
  else
    echo "ERROR: Filename must include a dash, or explicit destination must be given" >&2
    exit 1
  fi
  [[ -e $dest ]] && {
    echo "ERROR: $dest already exists" >&2
    return 1
  }

  tempdir=$(mktemp -d "${TMPDIR:-/tmp}"/unpack.XXXXXX)
  tar -xzf "$1" -C "$tempdir" || {
    rm -rf "$tempdir"
    echo "ERROR: Unpack failed" >&2
    return 1
  }
  contents=("$tempdir"/*)
  (( ${#contents[@]} > 1 )) && {
    # rename the tempdir we unpacked into to our destination
    mv -- "$tempdir" "$dest"
    return
  }

  mv -- "$contents" "$dest"
  rm -rf "$tempdir"
}

运行方式:

unpack install-0.3.tar.gz # put contents of tarball into directory named install

...或...

unpack install-0.3.tar.gz outdir # put contents of tarball into directory named outdir

要将此功能添加到脚本中,只需添加初始#!/bin/bash,取出unpack() {和尾随},然后将return更改为exit无处不在。

答案 2 :(得分:0)

#!/usr/local/bin/bash

# Change the above line to match your bash path.

let "filename=${1}"
let "dirname=$(echo ${filename} | sed s'@\.tar\.gz@@'g)"

mkdir install
tar zxvf "${filename}"
cp -a "${dirname}/*" install
cd "${dirname}"
rm -rf ./*
cd ..

我认为这应该有用。

答案 3 :(得分:0)

这应该做:

filename="install-0.1.tar.gz"
foldername="${filename%%-*}"
mkdir -p "$foldername"
tar xzf "$filename" -C "$foldername"

在这种情况下,文件名中的-至关重要。之后的所有内容都将在$foldername中被忽略。