파일 목록에서 입력을받는 Tar 아카이브


166

tar로 아카이브하려는 파일 목록이 포함 된 파일이 있습니다. 전화합시다mylist.txt

그것은 포함합니다 :

file1.txt
file2.txt
...
file10.txt

mylist.txt입력으로 사용 되는 TAR 명령을 실행할 수있는 방법이 있습니까? 같은 것

tar -cvf allfiles.tar -[someoption?] mylist.txt

따라서이 명령을 실행하는 것과 비슷합니다.

tar -cvf allfiles.tar file1.txt file2.txt file10.txt 

4
tar 매뉴얼 페이지는이 옵션 (적어도 RedHat 5.4 ~ 6.3에서 6.3)에 매우 도움이되지 않습니다. "-T : 파일 F에서 이름을 추출하거나 생성하십시오". "압축 해제 또는 작성"은 tar 아카이브에서 파일을 가져 오지만 파일을 넣지 않은 경우에 적용되는 것처럼 들립니다. -X제외 옵션은 이전 Unix tar 명령에서 유지되지만 분명히 -I (포함)는 그렇지 않습니다!
오우거 시편 33

표준 섹션 임에도 불구하고 섹션 man이있는 페이지 가 거의 없습니다 . < unix.stackexchange.com/questions/306189/… >를 참조하십시오 . EXAMPLES
sam boosalis

답변:


262

예:

tar -cvf allfiles.tar -T mylist.txt

mylist.txt에 주석을 넣을 수 있기를 바랍니다. mylist.txt 내부에서 tar 옵션을 사용하는 해결 방법이 있습니까?
Stphane

7
간단한 @Stphane --exclude 플래그를 사용하면 가능합니다. 주석 행이 '#'로 시작한다고 가정하면 다음과 같은 명령은 cmments를 포함하는 행에서 시도 된 파일 조작을 무시 / 제외합니다. 즉 명령은 다음과 같습니다. tar -cvf allfiles.tar --exclude = '^ # '-T mylist.txt. Tar은 오류를보고하지만 tar 아카이브를 확인할 때 오류가 없으며 목록의 모든 파일이 아카이브 내에 있습니다.
Matt G

이 명령은 Linux 변형 용이며 sunOS 또는 기타 변형 용인 경우 아래의 다른 답변을 확인하십시오. 예를 들어 SunOS의, 내가 테스트 한 두 가지 대안 : 타르 -cvf file.tar -I List.txt 파일 및 타르 -cvf file.tar $ (고양이 List.txt 파일)
나스리 나 지브

-L mylist.txtAIX에서
Roland

82

GNU tar (Linux이므로)를 선택하면 -Tor --files-from옵션이 원하는 것입니다.


3
이 옵션은 FreeBSD의 (10)의 "bsdtar 3.1.2"에 존재
drue

33

유용한 파일 이름을 파이프로 연결할 수도 있습니다.

find /path/to/files -name \*.txt | tar -cvf allfiles.tar -T -

2
.txt 파일 목록이 실제로 큰 경우 어떻게해야합니까? tar -c .. 대신 tar -r ..와 함께 xarg 명령을 사용해야합니까?
Stphane

1
@Stphane Hmm, 나는 목록의 길이 가이 방법에별로 중요하다고 생각하지 않습니다. 실제로 xargs가 데이터를 추가하기 위해 반복적으로 tar를 다시 실행하기 때문에이 방법이 xargs보다 낫다고 생각하지만 실제로 방법을 나란히 테스트하지는 않았습니다.
wot

2
여기에서 파이프가 사용되는 경우 운영 체제는 파이프의 양쪽에 스트림을 생성하고 데이터의 생산 및 소비를 동기화합니다. 파일 목록은 무한 할 수 있습니다. 파이프 끝에 충분한 저장 공간이 있다고 가정하면 라즈베리 파이 제로를 사용하여 전체 인터넷을 tar / gz 할 수 있습니다.
Richard Gomes

14

일부 tar 버전 (예 : HP-UX의 기본 버전 (11.11 및 11.31 테스트))에는 파일 목록을 지정하는 명령 줄 옵션이 포함되어 있지 않으므로 적절한 해결 방법은 다음과 같습니다.

tar cvf allfiles.tar $(cat mylist.txt)

4
UUoC (불필요한 사용 cat), 간단히 $(<mylist.txt).
David C. Rankin

2
mylist.txt큰 경우 명령 행의 최대 길이를 초과 할 수 있습니다.
Andre Holzner

이 경우 tar -T <(<mylist.txt). 이 답변과 중복됩니다.
Mike D

7

Solaris에서는 -I 옵션을 사용하여 일반적으로 파일에서 명령 행에 표시 할 파일 이름을 읽을 수 있습니다. 명령 줄과 달리 수십만 개의 파일로 tar 아카이브를 만들 수 있습니다 (그냥 그렇게했습니다).

따라서 예제는

tar -cvf allfiles.tar -I mylist.txt

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.