提取zip文件,然后用不同的文件名cd进入它

时间:2016-01-25 19:41:22

标签: linux bash tar

我正在创建一个bash脚本来提取tar文件并将其cd入其中然后它运行另一个脚本。到目前为止,这与我下面的代码工作得很好,但是,我遇到了一个案例,如果提取的文件夹与.tar文件名不同,那么它会引起问题。所以我的问题是,如何处理文件名与.tar filename不同的唯一情况。

例如,)my_file.tar --->提取后----> my_different_file_name

#!/bin/bash

fname=$1

echo the file you are about to extract is $fname

if [ -f $fname ]; then         #if the file exists
    tar -xvzf $fname       #tar it
    cd ${fname%.*}         #the `%.*` will extract filename from     filename.tgz and cd into it
    echo ${fname%.*}
    echo $PWD
    loadIt                 #another script to load
fi

3 个答案:

答案 0 :(得分:1)

你可以做:

2>&1 1>> mylog.log

说明:第一个命令解压缩(输出它所有的文件),然后获取所有前导目录名,并将它们输入uniq。 (所以基本上它返回tar文件中所有顶级目录的列表)。下一行检查topDir中只有一个条目,否则退出。 此时$ topdir将是您想要进入的目录。

答案 1 :(得分:0)

也许你可以这样做:

cd $(tar -tf $fname | head -1)

答案 2 :(得分:0)

如果您在提取目录后不介意移动目录,则可以执行以下操作

# Create a temporary directory
$ tmpd=$(mktemp -d)
# Change to the temporary directory
$ pushd "$tmpd"
# Extract the tarball
$ tar -xf "$fname"
# Glob the directory name
$ d=(*)
# Error if we have more (or less) than one directory
$ [ "${#d}" = 0 ] || exit 1
# Explicitly use just the first directory (optional since `$d` does the same thing)
$ d=${d[0]}
# Move the extracted directory to the previous directory
$ mv "$d" "$OLDPWD"
# Change back to the starting directory
$ popd
# Remove the (now empty) temporary directory
$ rmdir "$tmpd"
# Change into the extracted directory
$ cd "$d"
# Run 'loadIt'
$ loadIt