Shellでネストされた.tarを使用してFile.tar.gzを解凍する

Shellでネストされた.tarを使用してFile.tar.gzを解凍する

シェルスクリプトからファイルを抽出しようとしています。 file.tar.gzのファイルの1つは圧縮されていないtarファイルです。

いくつかの方法を試しましたが、成功しませんでした。

https://stackoverflow.com/questions/18897060/how-to-extract-a-tar-file-inside-a-tar-file

単一のtar呼び出しを使用した複数の.tar.gzファイルの抽出

#have tried this
for file in "$MY_TAR"
do
NEWDIR=`echo $file | tr -d [a-zA-Z.]`
mkdir $NEWDIR
tar -xvf $file -C $NEWDIR
done 

# And this
for file in *.tar.gz; do tar -zxf $file; done

#snip -------
for file in "$MY_ZIP"
do
if [ "$file" == "$NESTED_TAR"] ; then
mkdir "$NESTEDTAR_DIR"
tar -xOf "$file" -C  "$NESTEDTAR_DIR" | tar -x
else
tar -xvf "$file"
fi
done

編集:シェルスクリプトを使用して解凍したら、内容を解凍して保存し、名前付きディレクトリにNested_Tar.tarに解凍する必要があります。

入力例My_Tar:

/Unique_DirNameAfterUnTar
File1
Documents/
Nested_Tar.tar (this is not untaring needs to untar into dir named Nested_Tar)
File2
File3
Another_Documents_Dir/
File4

ベストアンサー1

次のスクリプトは、最上位のtar.gzファイル(My_Tar.tar.gz)を$ NEWDIRに抽出し、抽出した内容を繰り返し、見つかったtarファイルをそのtarファイル名に基づいてディレクトリに抽出します。ネストされたtarファイルがその内容の「上記」に作成されている場合(たとえば、Nested_Tar.tarのサブディレクトリとして「Nested_Tar /」がある場合)、次のセクションとmkdir内部-C "$d".tarファイルのオプションをスキップできますtar

NEWDIR=output
tar -xz -C $NEWDIR -f ../My_Tar.tar.gz
(cd $NEWDIR;
for f in *.tar
do
  d=$(basename "$f" .tar)
  mkdir "$d" && tar -x -C "$d" -f "$f"
done
)

私は既存のシェルのパスワードをcwdに保つためにサブシェルを使用しました。 $NEWDIRの中に入れるには、外括弧を削除するだけです。

おすすめ記事