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

How to remove a version number from a folder

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

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

我想 运行 一行将其中一个压缩包解压到一个文件夹中,如下所示:

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

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

下面是一个 bash 函数,它试图覆盖极端情况。

它不止一行,但那是因为它得到了所有的细节——查看目标是否已经存在,检测包含多个目录的 tarball,等等。

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

  if [[  ]]; then
    dest=
  elif [[  = *-* ]]; 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 "" -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改成[=17] =] 无处不在。

假设 tarball 包含名为 install:

的文件夹
tar xzf install-<version>.tar.gz

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

tar xzf install-<version>.tar.gz --transform='s/<version>//g'
#!/usr/local/bin/bash

# Change the above line to match your bash path.

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

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

我认为这应该可行。

应该这样做:

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

在这种情况下,文件名中的 - 至关重要。 $foldername.

之后的所有内容都将被忽略