원격 시스템에서 로컬 시스템으로 FTP를 연결하는 데 바쁜 대형 타르볼이 있습니다.
압축 해제를 시작할 수 있는지 알고 싶습니다. 한 번에 50개의 파일을 말하여 전송이 진행되는 동안 해당 파일이 처리되기 시작할 수 있도록 합시다.
답변1
여기아카이브에서 특정 파일을 추출하는 방법에 대한 자세한 설명입니다. 특히 GNU tar는 tarball에서 하나 이상의 파일을 추출하는 데 사용할 수 있습니다. 특정 아카이브 멤버를 추출하려면 정확한 멤버 이름을 인수로 제공하십시오.
예를 들어:
tar --extract --file={tarball.tar} {file}
특정 globbing 패턴(와일드카드)과 일치하는 파일을 추출할 수도 있습니다. 예를 들어 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
: bzip2를 통해 아카이브를 필터링하고, .bz2 파일의 압축을 푸는 데 사용합니다.
-z
: gzip을 통해 아카이브를 필터링하고, .gz 파일의 압축을 푸는 데 사용합니다.
--wildcards
: 명령줄 인수를 글로빙 패턴으로 처리하도록 tar에 지시합니다.
--no-anchored
: / 구분 기호 뒤의 멤버 이름에 패턴이 적용됨을 알립니다.
답변2
tar -tvf tarfile.tar
당신에게 파일의 전체 목록을 제공합니다tarfile.tar
tar -xvf tarfile.tar fileToRestore
이 명령은fileToRestore
여러 파일의 압축을 해제하려면 다음을 수행할 수 있습니다.
모든 파일 목록
tarfile.tar
을tar.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줄 후에 파이프를 종료합니다. 파이프가 죽으면 타르도 죽을 것으로 예상됩니다.