빈 타르 아카이브를 얻는 방법?


24

모든 것이 .spec 파일에 포함되어있는 RPM을 만들고 있습니다 (:-). rpmbuild에는 "소스"파일이 필요하므로 빈 tar 파일을 만들려고했습니다. 그러나 파일 이름을 지정하지 않으면 tar는 다음과 같이 불평합니다.

tar: Cowardly refusing to create an empty archive
Try `tar --help' or `tar --usage' for more information.

진정으로 비어있는 tar 파일을 어떻게 만듭니 까?


그것은 여기에 전에 대답했다 : superuser.com/questions/133186/…
Rhyuk

3
실제로 @Rhuyuk은 그렇지 않습니다. 이 게시물은 파일 이름을 나열하는 것을 잊어 버린 사람으로, 다른 인수를 전달하여 비어 있지 않은 아카이브를 생성해야한다는 사실을 알게되었습니다. 이것이 제가 그 질문의 제목을 바꾸고이 질문을 만든 이유 입니다.
Sean Reifschneider

답변:


24

GNU 및 BSD tar가 다음을 사용하여 빈 아카이브를 작성하도록 할 수 있습니다.

tar -cf tarfilename.tar -T /dev/null

나중에 'f'옵션은 파일 이름을 지정하므로 마지막 옵션이어야합니다. T라는 이름의 아카이브를 만들지 만 tarfilename.tar 파일이 누락되면 오류가 발생합니다.
lornix

1
빈 타르를 작성하는 한 가지 이유 : 스크립트 타르 작성. 1 단계 : 타르 생성 2 단계 : 파일을 하나씩 추가합니다. "첫 번째 파일 인 경우 다른 파일을 만든 다음 추가"를 사용하여이 작업을 수행 할 수 있지만 그다지 부드럽 지 않습니다.
dpk

4
@ dpk : 당신이 말하는 것을 이해한다면, 왜 항상 append를 사용하지 않습니까? Append는 아직 존재하지 않는 경우 tar 파일을 생성하므로, 첫 번째 파일인지 확인하지 않아도됩니다. 추가 만하면됩니다.
Sean Reifschneider 2

1
@SeanReifschneider 그것은 잘 작동하는 것 같습니다. 좋은.
dpk

1
@SeanReifschneider : 추가 모드가 디스크에없는 경우 첫 번째 파일의 아카이브를 작성한다는 추가 힌트에 대해 +1입니다. 스크립트에서 추가 모드로 tar를 실행하기 위해 find 명령을 사용하고 있으므로 미리 아카이브 파일을 만들 필요가 없습니다.
GuruM

8

BSD : tar cvf empty.tar --from-file /dev/null

GNU (리눅스) : tar cvf empty.tar --files-from /dev/null

솔라리스 : tar cvf empty.tar -I /dev/null


마지막으로 Solaris에서 작동하는 것 !! 감사합니다
AJPerez

4

빈 tar 파일은 10240 NUL 바이트가 들어있는 파일입니다. 따라서 빈 tar 파일을 만들려면 필요하지 tar않지만 대신 다음 중 하나를 사용할 수 있습니다.

$ head --bytes=10240 /dev/zero > empty.tar
$ truncate --size=10240 empty.tar
$ fallocate --length=10240 empty.tar
$ dd if=/dev/zero bs=10240 count=1 iflag=fullblock > empty.tar
$ dd if=/dev/zero bs=1 count=10240 > empty.tar

dd 사용법에 대한 힌트를 주신 @KamilMaciorowski 감사합니다! 나는 새로운 것을 배웠다! 올바른 질문에 대한 대답 : 제목은 실제로 "tar를 강제로 실행하는 방법"을 묻지 만 질문 텍스트를 읽을 때 OP는 실제로 빈 tar 파일을 원한다는 점이 분명해졌으며 그 방법은 중요하지 않습니다.
josch

계속해서 질문을 편집했습니다.
Kamil Maciorowski

3

단일 파일을 보관 한 다음 보관에서 파일을 삭제하여 빈 보관 파일을 만들 수있었습니다.

tar cf empty.tar somefile                   # creates archive
tar --delete -f empty.tar somefile          # remove the file
tar tf empty.tar                            # list contents of archive

이것은 나를 위해 작동합니다.


2
GNU tar를 사용하면 모든 NUL 문자의 예상 10K 파일이 생성되는지 확인할 수 있습니다.
Sean Reifschneider
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.