1

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

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

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

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

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

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

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

4

2 回答 2

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
于 2013-03-21T13:20:37.547 回答
1

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

for i in *.tgz; do tname=$(echo $i | sed -e 's/.tgz//') ; tar xvf $i -C ../stats/$tname; done
于 2013-03-21T18:57:31.653 回答