대형 타르볼에서 특정 수의 파일만 추출

대형 타르볼에서 특정 수의 파일만 추출

FTP를 통해 원격 시스템에서 로컬 시스템으로 전송하는 중 큰 타르볼이 있습니다.

전송하는 동안 파일 처리를 시작할 수 있도록 한 번에 50개의 파일 압축을 풀 수 있는지 알고 싶습니다.

답변1

여기아카이브에서 특정 파일을 추출하는 방법에 대한 자세한 설명입니다. 특히 GNU tar는 tarball에서 단일 또는 여러 파일을 추출하는 데 사용할 수 있습니다. 특정 아카이브 멤버를 추출하려면 정확한 멤버 이름을 매개변수로 제공하세요.

예를 들어:

tar --extract --file={tarball.tar} {file}

특정 와일드카드 패턴(와일드카드)과 일치하는 파일을 추출할 수도 있습니다. 예를 들어, 디렉토리 접두어에 관계없이 cbz.tar에서 pic로 시작하는 모든 파일을 추출하려면 다음을 입력하십시오.

tar -xf cbz.tar --wildcards --no-anchored 'pic*'

모든 PHP 파일을 추출하려면 다음을 입력하십시오.

tar -xf cbz.tar --wildcards --no-anchored '*.php'

어디,

-x: tar에 파일 압축을 풀도록 지시합니다.
-f: 파일명/압축패키지명을 지정합니다.
-v: 자세한 내용(파일 추출 중 진행률 표시)
-j: .bz2 파일의 압축을 푸는 데 사용되는 bzip2를 통해 압축된 패키지를 필터링합니다.
-z: .gz 파일의 압축을 푸는 데 사용되는 gzip을 통해 압축된 패키지를 필터링합니다.
--wildcards: 명령줄 인수를 와일드카드 패턴으로 처리하도록 tar에 지시합니다.
--no-anchored: / 구분 기호 뒤의 모든 멤버 이름에 패턴이 적용됨을 알립니다.

답변2

tar -tvf tarfile.tar

전체 파일 목록을 제공합니다tarfile.tar

tar -xvf tarfile.tar fileToRestore  

이 명령은 복원fileToRestore

모든 파일이 아닌 여러 파일의 압축을 풀려면 다음을 수행할 수 있습니다.

  • 모든 파일 목록 tarfile.tartar.txt

    tar -tvf tarfile.tar > tar.txt
    
  • 이제 tar.txt전체 파일 목록이 있으므로 tarfile.tar 복구하려는 파일이나 헤더 파일만 보관할 수 있습니다.

    head -n50 tar.txt > tar2.txt
    

이 줄을 파일에 넣을 수 있습니다

cat tar.txt|while read line
do
   tar -xvf tarfile.tar ${line}
done

또는 전체 스크립트 파일:

#!/bin/bash

if [[ "$1" = "" || "$2" = "" ]]
   then
   echo ""
   echo "Uso: untar-list.sh tarfile.tar listfile.txt"
   echo ""
   exit 1
fi

tarfile=$1
file=$2

if [[ ! -f ${tarfile} ]]
   then
   echo ""
   echo "Archivo ${tarfile} no existe"
   echo ""
   exit 1
fi

if [[ ! -f ${file} ]]
   then
   echo ""
   echo "Archivo ${file} no existe"
   echo ""
   exit 1
fi

cat ${file}|while read line
do
  tar -xvf ${tarfile} ${line}
done

echo ""
echo "Finalizado"
echo ""

그게 다야

답변3

직접 시도해본 적은 없지만 다음과 같습니다.

tar xvf archive.tar | head -n50

Tar는 추출된 각 파일에 대해 한 줄을 STDOUT에 출력하고 head명령은 50줄 후에 파이프를 종료합니다. 파이프가 사라지면 타르도 사라지길 바랍니다.

관련 정보