使用tar命令时如何将解压后的文件名保存到变量中?
如何获取tar解压后动态生成的目录名
嘿,这个需求我碰到过好多次啦——要拿到tar包解压后自动生成的目录名,没法硬编码确实有点麻烦。给你分享几个实用的解决方案:
方法一:提前预览tar包内容提取目录名
如果你的tar包只有一个顶层目录(大部分场景都是这样),可以先通过tar命令列出包内内容,提取出第一个顶层目录名,再执行解压:
# 提取tar包中的顶层目录名 extract_dir=$(tar --list --file something.tgz | head -n 1 | cut -d '/' -f 1) # 执行解压操作 tar --extract --file something.tgz # 输出目录名 echo "刚解压的目录是:$extract_dir"
原理说明:
tar --list --file something.tgz:列出tar包内的所有文件/目录路径head -n 1:取第一行(也就是tar包中最顶层的第一个条目)cut -d '/' -f 1:以/为分隔符,截取第一个部分,得到顶层目录名
方法二:通过临时目录安全获取目录名
如果不确定tar包内的顶层结构(比如可能有多个顶层文件/目录),可以先解压到临时目录,再从中获取目标目录:
# 创建一个唯一的临时目录 temp_dir=$(mktemp -d) # 把tar包解压到临时目录 tar --extract --file something.tgz --directory "$temp_dir" # 获取临时目录中的顶层目录(假设仅存在一个) extract_dir=$(ls -1 "$temp_dir") # 将解压后的目录移到当前工作目录 mv "$temp_dir/$extract_dir" . # 删除空的临时目录 rmdir "$temp_dir" # 输出目录名 echo "刚解压的目录是:$extract_dir"
注意事项:
- 如果tar包内有多个顶层条目,
ls -1会输出多行,这时候你可能需要根据实际情况过滤(比如用grep -E '/$'筛选目录) mktemp -d会创建一个随机命名的临时目录,避免和现有文件冲突,安全性更高
额外提示
如果你的tar包解压后是一堆零散文件(没有顶层目录),那这个需求就不适用啦——这种情况建议你提前给tar包加上顶层目录再打包,或者解压时手动指定目标目录。
内容的提问来源于stack exchange,提问作者dataviews
相关产品推荐
相关产品推荐

