我在这样的目录中构建了安装程序:
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
解压缩和重命名文件夹是重要的一点。 谢谢你的帮助
答案 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
中被忽略。