我正在创建一个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
答案 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