Làm thế nào để có được một kho lưu trữ tar trống?


24

Tôi đang thực hiện một RPM trong đó mọi thứ được chứa trong tệp .spec (đừng hỏi :-). rpmbuild yêu cầu tệp "Nguồn", vì vậy tôi đã cố gắng tạo một tệp tar trống. Tuy nhiên, nếu tôi không cung cấp bất kỳ tên tệp nào, tar sẽ phàn nàn:

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

Làm thế nào để tôi tạo một tập tin tar thực sự trống?


nó đã được trả lời trước đây: superuser.com/questions/133186/
Ấn

3
Thật ra, @Rhuyuk, không phải vậy. Bài đăng đó là một người quên liệt kê tên tệp và câu trả lời đã giúp họ nhận ra rằng họ cần phải vượt qua một đối số khác, dẫn đến một kho lưu trữ không trống. Đây là lý do tại sao tôi đã thay đổi tiêu đề của câu hỏi đó, và tạo ra câu hỏi này, mà DOES trả lời những gì tiêu đề của câu hỏi đó đã được yêu cầu.
Sean Reifschneider

Câu trả lời:


24

Bạn có thể buộc GNU và BSD tar tạo một kho lưu trữ trống với:

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

ya, tùy chọn 'f' phải là cuối cùng, vì nó chỉ định tên tệp. Bạn sẽ tạo một kho lưu trữ có tên T, nhưng nó sẽ bị lỗi khi thiếu tệp tarfilename.tar.
lornix

1
Một lý do để tạo ra một tar rỗng: tạo tar theo kịch bản. Bước 1: Tạo tar. Bước 2: Thêm từng tệp một. Bạn có thể làm điều này với một "nếu tập tin đầu tiên sau đó tạo khác sau đó nối thêm" nhưng điều đó không được suôn sẻ.
dpk

4
@dpk: Nếu tôi hiểu những gì bạn đang nói, tại sao bạn không luôn luôn sử dụng phụ lục? Append sẽ tạo tệp tar nếu nó chưa tồn tại, vì vậy bạn không cần kiểm tra xem đó có phải là tệp đầu tiên không, chỉ cần nối thêm và nếu tệp tar đầu tiên sẽ tạo tệp đó.
Sean Reifschneider

1
@SeanReifschneider Có vẻ như nó sẽ hoạt động tốt. Tốt đẹp.
dpk

1
@SeanReifschneider: +1 cho gợi ý rằng chế độ chắp thêm sẽ tạo tệp lưu trữ cho tệp đầu tiên nếu nó chưa có trên đĩa. Tôi đang sử dụng lệnh find để thực thi tar trong chế độ chắp thêm trong tập lệnh nên không cần phải tạo tệp lưu trữ trước.
Giáo sư

8

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

GNU (Linux): tar cvf empty.tar --files-from /dev/null

Solaris: tar cvf empty.tar -I /dev/null


Cuối cùng là một cái gì đó hoạt động trong Solaris !! Cảm ơn rất nhiều
AJPerez

4

Một tệp tar trống chỉ là một tệp có 10240 NUL byte trong đó. Vì vậy, để tạo một tệp tar trống, bạn thậm chí không cần tarmà thay vào đó có thể sử dụng một trong hai cách sau:

$ 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

@KamilMaciorowski cảm ơn bạn đã gợi ý về cách sử dụng dd! Tôi đã học được một cái gì đó mới! Về việc trả lời đúng câu hỏi: Tiêu đề thực sự hỏi "làm thế nào để buộc tar" nhưng khi đọc văn bản câu hỏi, nó trở nên rõ ràng, rằng OP thực sự muốn có một tệp tar trống và nó không quan trọng bằng cách nào.
josch

Tôi đã đi trước và chỉnh sửa câu hỏi.
Kamil Maciorowski

3

Tôi đã có thể tạo một kho lưu trữ trống bằng cách lưu trữ một tệp duy nhất, sau đó xóa tệp khỏi kho lưu trữ.

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

Điều này làm việc cho tôi.


2
Tôi có thể xác minh rằng với GNU tar, điều này sẽ tạo ra tệp 10K dự kiến ​​của tất cả các ký tự NUL.
Sean Reifschneider
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.