如何解压文件夹中的所有 .tgz 文件并写入具有不同命名约定的新文件

如何解压文件夹中的所有 .tgz 文件并写入具有不同命名约定的新文件

我有包含很多的文件夹.tgz文件,每个未压缩的文件都有相同的文件名 ”000000_0”。

有人可以给我写一个命令来执行下面的操作吗?

1. Untar all the .tgz files from a folder
2. rename each uncompressed file based on the .tgz file name

例如, 2017-07-01.tgz -> 我希望将未压缩的文件重命名为“2017-07-01.dat

假设我的目录中有 .tgz 文件列表:

2017-07-01.tgz
2017-07-02.tgz
2017-07-03.tgz
2017-07-04.tgz
2017-07-05.tgz

注意:每个.tgz文件里面只有一个文件,“000000_0”。

答案1

使用gnu parallel

$ parallel 'tar -xf {} --to-stdout > {.}.dat' ::: *.tgz

对于每个.tgz文件,文件都是未压缩的 ( -xf),并且文件的内容是流式传输的 stdout ( --to-stdout)。因此我们可以使用压缩文件的基名 ( )将>其重定向 ( ) 到具有新文件名的文件{.}.dat

没有gnu parallel

for file in *.tgz; do 
tar -xf $file --to-stdout > $(basename -s .tgz $file).dat;
done

如果basename版本太旧,则该-s参数不存在。代替使用$(basename $file .tgz)。这应该也适用于当前版本。

相关内容