【问题标题】:Rename directory after untar tgz file [duplicate]解压 tgz 文件后重命名目录[重复]
【发布时间】:2013-03-21 13:09:56
【问题描述】:

我有一堆 *.tgz 文件,当我解压它们时,目录名称与 tgz 文件的名称有何不同。示例:我有 ab.tgz 文件,它会更改为 2012_test_ab 之类的内容,我感觉会发生这种情况,因为在压缩文件期间必须重命名此压缩文件位于父目录等中。

但我想做的是将目录重命名为文件的原始名称。

我有以下一行脚本可以在终端上运行,但我该如何重命名?

for i in *.tgz; do tar xvf $i -C ../stats/; done

如何修改它以重命名解压缩的目录。

示例:当我解压缩 ab.tgz 时,它被提取到目录名称为 2013_03_12_18_26_ab 并且该目录中的文件但我想要做的是将目录名称保留为 ab 而不是 2013_03_12_18_26_ab

我想让ab.tgz 提取到../stats/ab

【问题讨论】:

    标签: bash shell gzip tar


    【解决方案1】:

    这样的事情可能会奏效。不过现在还早,所以我的语法可能有点不对劲。

    for i in *.tgz
    do 
    NEWDIR=`tar -tf $i | head -1 | cut -d/ -f2 | cut -d_ -f6` 
    mkdir ../stats/$NEWDIR 
    tar xvf $i -C ../stats/$NEWDIR/ 
    done
    

    或

    for i in *.tgz; do NEWDIR=`tar -tf $i | head -1 | cut -d/ -f2 | cut -d_ -f6`; mkdir ../stats/$NEWDIR; tar xvf $i -C ../stats/$NEWDIR/; done
    

    【讨论】:

    • for i in *.tgz; do NEWDIR = tar -tf $i |头-1 |剪切 -d/ -f1` mkdir $NEWDIR tar xvf $i -C ../stats/$NEWDIR; done` 像这样尝试过 get error NEWDIR command not found
    • 嗯仍然给我同样的错误#for i in *.tgz; do NEWDIR = ``tar -tf $i | head -1 | cut -d/ -f2`` mkdir $NEWDIR tar xvf $i -C ../stats/$NEWDIR; done
    • 错误说 bash: NEWDIR: command not found。我有点困惑。
    • 是的,我正在使用单引号并得到相同的错误是的,我使用单反引号与 tilda 共享密钥?
    • 哦,我明白了。变量赋值不能在 = 周围有空格。它必须是 VAR=value,而不是 VAR=value。
    【解决方案2】:

    假设你所有的 tar 档案都以 .tgz 扩展名结尾,并且原始文件名中可能有多个点,那么:

    for i in *.tgz; do tname=$(echo $i | sed -e 's/.tgz//') ; tar xvf $i -C ../stats/$tname; done
    

    【讨论】:

      猜你喜欢
      • 2015-10-08
      • 2015-02-28
      • 2023-02-20
      • 2022-01-06
      • 2012-02-16
      • 2013-12-05
      • 1970-01-01
      • 2021-03-14
      • 1970-01-01
      相关资源
      最近更新 更多