我有包含很多的文件夹.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)
。这应该也适用于当前版本。