linux - 如何明确解压 tgz 文件

标签 linux bash shell

我有许多名称完全相同的 .tgz 文件,我想将它们全部解压到一个具有唯一名称的目录中。我的偏好是附加 .tgz 所在文件夹的名称,

original location= /folder1/folder2/2015/04/08/something1.tgz
original location= /folder1/folder2/2015/04/09/something2.tgz

解压后,我希望将它们解压如下

target_folder= 20150408_something1
target_folder= 20150409_something2

最佳答案

something1.tar.gzsomething2.tar.gz 没有相同的名称。我假设你的意思是它们包含相同的顶级文件夹/文件?

在这种情况下(假设您的文件夹层次结构在所有 tarball 的路径中是一致的)您应该能够使用类似的内容。

for arc in /folder1/folder2/2015/04/08/something1.tgz /folder1/folder2/2015/04/09/something2.tgz; do
    # Get just the filename of the archive.
    fname=$(basename "$arc")
    # Strip off the extension from the filename.
    fname=${fname%.*}

    # Get just the last three directory components.
    dname=$(awk -F / '{print $(NF-3)$(NF-2)$(NF-1)}' <<<"$arc")

    mkdir "${dname}_$fname" || { ret=$?; echo "Could not create directory ${dname}_$fname."; exit $ret; }
    tar -xvf "$arc" -C "${dname}_$fname"
done

关于linux - 如何明确解压 tgz 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34657108/

相关文章:

android - 使用 android adb shell 返回一个 Activity

c - unix网络编程select函数总是返回1(resoved)

linux - 无法为 nagios 配置远程 nrpe 插件

linux - 无法解压文件?

bash - 如何在 Makefile 中使用 shell 命令

bash - 检查管道 grep 的输出

linux - 用 sed 删除字符串的组合

bash - 使用 bash/awk 从 csv 中删除重复项

r - 如何通过 shell 从父目录获取 R 文件?

linux - 如何编写 shell 脚本通过 2 台计算机到第三台计算机的隧道