Shell에서 중첩된 .tar를 사용하여 File.tar.gz 압축 풀기

Shell에서 중첩된 .tar를 사용하여 File.tar.gz 압축 풀기

쉘 스크립트에서 파일을 추출하려고 합니다. file.tar.gz에 있는 파일 중 하나는 압축되지 않은 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 안에 들어가게 하려면 외부 괄호를 제거하기만 하면 됩니다.

관련 정보