저는 GNU를 사용하여 tar
다중 볼륨 아카이브를 생성하고 있습니다.
DIR=~/temp
BLOCKSIZE=500M
tar cMf multi-0001.tar --new-volume-script=volume-script.sh --tape-length=$BLOCKSIZE $DIR
각 볼륨의 내용을 표시하는 파일 목록을 만들고 싶습니다. 여러 옵션을 추가해 보았지만 --verbose
보관 중인 모든 파일의 목록은 제공되지만 해당 파일이 어떤 볼륨에 있는지는 알려주지 않습니다.
명령 을 사용하여 tar를 통해 각 볼륨을 다시 실행할 수 있다는 것을 알고 있지만 --list
모든 데이터를 두 번 처리하는 것을 피하고 싶습니다.
(참고로 아래에 있습니다 volume-script.sh
. 질문과 관련이 없는 것 같습니다.
#! /bin/bash
echo multi-$(printf "%04d" $TAR_VOLUME).tar >&$TAR_FD
)
편집: 질문이 철회되었습니다
이 질문에는 잘못된 가정이 포함되어 있습니다.이는 후속 질문에 대한 답변에서 확인됩니다.이는 --list
검색 가능한 미디어에 인덱스 파일을 생성하는 데 완벽하게 허용되는 방법입니다. 내 솔루션은 이제 다음과 같습니다.
DIR=~/temp
BLOCKSIZE=500M
tar cMf multi-0001.tar --new-volume-script=volume-script.sh --tape-length=$BLOCKSIZE $DIR
for i in *.tar;
do echo q | tar --list -M -f $i --verbose --verbose > $i.index.txt 2>/dev/null;
done
답변1
내 생각에 당신이 요구하는 것은 다음과 같습니다.
tar tvf filename
이렇게 하면 tar 파일을 열지 않고도 해당 파일의 내용 목록이 생성됩니다. tar 아카이브를 생성한 후 실행해야 하지만 필요한 것을 제공해야 합니다.
다음과 같이 tar 명령 뒤에 간단히 연결할 수 있습니다.
tar cMf multi-0001.tar --new-volume-script=volume-script.sh --tape-length=$BLOCKSIZE $DIR ; tar tvf multi-0001.tar > multi-001-listing.txt
답변2
제가 간과하고 있는 간단한 방법이 있을 수 있지만, 볼륨 스크립트가 자세한 색인 출력에서 새 이름을 가져오도록 할 수 있을 것 같습니다. 다음과 같은 것(테스트되지 않음):
export templisting=$(mktemp)
export tempoffset=$(mktemp)
DIR=~/temp
BLOCKSIZE=500M
tar cvMf multi-0001.tar --index-file=$templisting --new-volume-script=volume-script.sh --tape-length=$BLOCKSIZE $DIR
rm $templisting $tempoffset
Volume-script.sh에서(logtail 사용, 선택 사항):
#! /bin/bash
echo multi-$(printf "%04d" $TAR_VOLUME).tar >&$TAR_FD
listingfile= #however you want to name listing files.
logtail -f$templisting -o$tempoffset > $listingfile