Tạo một tệp gzip có kích thước được xác định trước


8

Tôi muốn kiểm tra tải lên các tệp thuộc loại nội dung application/x-gzipcó kích cỡ khác nhau, từ 100 MB đến 999 MB.

Làm thế nào tôi có thể đi về việc tạo .gztập tin của các kích thước được xác định trước? Nếu tôi làm dd if=/dev/zero of=somefile bs=1 seek=100, tập tin kết quả sau khi nén thường rất nhỏ.

Câu trả lời:


18
  • Bạn có thể tạo tệp gzip 10 MB như thế này:

    head -c 10M /dev/urandom | gzip -1 >10m.gz
    

    Điều này sử dụng urandomđể có được một luồng byte có độ entropy cao: vì điều này là không thể nén được, phiên bản được nén sẽ có cùng kích thước với đầu vào.

  • Sau đó, bạn có thể catenate các bản sao của tệp gzip của mình với nhau:

    cat $(perl -e "print '10m.gz ' x 30") >300m.gz
    

    Ba mươi bản sao của tệp nguồn sẽ có dung lượng khoảng 300 MB và 100 bản sao sẽ có dung lượng khoảng một gigabyte.


Tôi đã phải sử dụng -c 10m thay vì 10M. Nghỉ ngơi là tốt. Cảm ơn!
Senthil Kumaran

3
Bạn có thể nối một số tệp gzip và nhận một tệp gzip khác với dữ liệu được nối không? Điều đó có vẻ tinh ranh.
dùng253751

2
Có, bạn có thể nối các tệp gzip. stackoverflow.com/questions/8005114/
Mạnh

2

Đây là một phương pháp khác. Bạn có thể tạo tập tin bằng cách điều khiển biến vòng lặp filecount. Điều này tạo ra các tệp ngẫu nhiên có kích thước từ 100 MB đến 900 MB và gzips chúng.

#!/bin/bash
filecount=0
while [ $filecount -lt 10 ]
do
filesize=$((RANDOM%9+1))
filesize=$(($filesize*104857600))
</dev/urandom head -c "$filesize" | gzip > /tmp/file${filecount}.$RANDOM.gz
((filecount++))
done

3
Đầu ra từ base64có thể nén khoảng 25%; Tôi khuyên bạn nên bỏ qua bit cơ sở 64 và gọi trực tiếp /dev/urandom.
dhag

1
@dhag cảm ơn. Tôi chỉnh sửa câu trả lời để phản ánh điều đó.
rahul
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.