フォルダ内のすべての.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ファイルには1つのファイルしかありません。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)。これは現在のバージョンでも機能します。

関連情報