999번 압축된 동일한 이름의 파일이 있습니다 **flag_999.tar.gz**
. 아무것도 작동하지 않으므로 이 모든 파일이나 bash 스크립트의 압축을 풀 수 있는 방법이 있습니까?
파일 이름은 flag_999.tar.gz이고, 아카이브 내부에는 flag_998.tar.gz가 있고, 아카이브 내부에는 flag_997.tar.gz가 있습니다. 따라서 여기서 "flag_"는 상수이고 숫자가 감소하며 내부의 파일 이름을 확인하기 위해 수동으로 flag_967.tar.gz에 도달합니다.
나는 시도했다:
file=(*tar); while [[ -e $file ]]; do tar zxf "$file"; rm "$file"; file=(*tar); done
출력 없음
awk -F'\0' '/[^\0]/{print $(NF)}' flag_999.tar.gz
출력을 읽을 수 없습니다.
for i in {1000..1}; do tar -xf $i.tar; done
어쩌면 이것이 효과가 있을 수도 있지만, 사용법을 모르기 때문에 잘 모르겠습니다.
파일을 보고 다운로드하려면 여기를 클릭하세요.https://drive.google.com/file/d/1ycWVR0htwFyexCJRohTGHio4UFdvGuPW/view?usp=sharing
답변1
GNU 구현을 사용하면 다음과 같은 스크립트를 tar
작성할 수 있습니다 .extract
#! /bin/sh -
PROGNAME="$0" exec tar -zxvvf - --to-command='
case "$TAR_FILENAME" in
(*.tar.gz | *.tgz) exec "$PROGNAME";;
(*) set -o noclobber
mkdir -p -- "$(dirname -- "$TAR_FILENAME")" &&
exec cat > "$TAR_FILENAME"
esac' 3<&-
다음과 같이 호출됩니다:
path/to/extract < flag_999.tar.gz
당신의 경우에는.
tar
스크립트는 --to-command
이름이 또는 로 끝나는 각 아카이브 구성원에 대해 '를 통해 .tar.gz
재귀적으로 자신을 호출 합니다 .tgz
. 중간 tar 파일을 디스크에 저장하지 않고 즉시 파일을 추출합니다.
일반 파일만 추출하고 파일 메타데이터는 복원하지 않습니다.
답변2
이 이상한 파일은 좋은 스트레스 테스트입니다라타마운트. 기본적으로 해당 옵션을 사용하면 즉시 작동 --recursive
하지만 이와 같이 너무 길어지는 파일 경로가 있습니다 mountpoint/flag_998.tar.gz/flag_997.tar.gz/flag_996.tar.gz/flag_995.tar.gz/flag_994.tar.gz/...
. 이를 방지하기 위해 기존 명령줄 옵션에 보다 일반적인 명령줄 옵션을 추가하여 --strip-recursive-tar-extension
이제 마운트할 수 있습니다. 재귀 tar의 지점은 임의의 변환을 사용하여 변환될 수 있습니다 --transform-recursive-mount-point
. 아직 완전히 출시되지는 않았지만 이미 다음과 같이 시도해 볼 수 있습니다.
python3 -m pip install --user --force-reinstall 'git+https://github.com/mxmlnkn/ratarmount.git@develop#egginfo=ratarmountcore&subdirectory=core'
python3 -m pip install --user 'git+https://github.com/mxmlnkn/ratarmount.git@develop#egginfo=ratarmount'
ratarmount --recursive --transform-recursive-mount-point '.*/' '' flag_999.tar.gz mountpoint
ls -lA mountpoint
# drw-r--r-- 1 root root 146 May 24 2019 flag_0.tar.gz
# drw-r--r-- 1 root root 17331 May 24 2019 flag_100.tar.gz
# drw-r--r-- 1 root root 17490 May 24 2019 flag_101.tar.gz
# drw-r--r-- 1 root root 17652 May 24 2019 flag_102.tar.gz
ls -lA mountpoint/flag_0.tar.gz/
# -rw-r--r-- 1 root root 33 May 24 2019 flag.txt
cat mountpoint/flag_0.tar.gz/flag.txt
이제 알 수 있습니다. 모든 것이 제대로 작동한다면 원본 아카이브에는 기본적으로 단일 파일에 일종의 16진수 해시가 포함되어 있는 것입니다.