Untar File.tar.gz do Shell com Nested .tar

1

Estou tentando descompactar um arquivo de um script de shell. Há um arquivo dentro do file.tar.gz que é um tar que não está sendo descompactado.

Eu tentei vários métodos sem sorte.

link

Extrair vários arquivos .tar.gz com uma única chamada de alcatrão

#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

Editar: Depois de descompactar com o shell script, o conteúdo deve ser descompactado e retido, assim como o Nested_Tar.tar deve ser descompactado para dentro do próprio diretório.

Exemplo de entrada 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
    
por Upworks 06.03.2016 / 19:37

1 resposta

0

Aqui está um script que irá extrair um arquivo tar.gz de nível superior (My_Tar.tar.gz) para $ NEWDIR, depois percorrer o conteúdo extraído e extrair quaisquer arquivos tar descobertos em diretórios baseados nesses nomes de arquivos tar. Se os arquivos tar aninhados foram criados 'acima' de seu conteúdo (para que, por exemplo, Nested_Tar.tar tenha "Nested_Tar /" como um subdiretório já), você poderá pular a parte mkdir abaixo, bem como a -C "$d" opção para o interior 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
)

Eu usei um subshell apenas para manter o pwd do seu shell existente no cwd; se você preferir acabar dentro de $ NEWDIR, apenas remova os parênteses externos.

    
por 07.03.2016 / 17:31