Linux

如何解壓文件夾中的所有 .tgz 文件並寫入具有不同命名約定的新文件

  • February 6, 2019

我的文件夾包含許多**.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 ”。

使用gnu parallel

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

對於每個.tgz文件,文件是未壓縮的 ( -xf) 並且文件的內容流式傳輸標準輸出 ( --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)。這也應該適用於目前版本。

引用自:https://unix.stackexchange.com/questions/499142