Tôi đang tìm kiếm một lệnh để tạo nhiều (hàng ngàn) tệp chứa ít nhất 1KB dữ liệu ngẫu nhiên.
Ví dụ,
Name size
file1.01 2K
file2.02 3K
file3.03 5K
etc.
Làm thế nào tôi có thể tạo nhiều tập tin như thế này?
Tôi đang tìm kiếm một lệnh để tạo nhiều (hàng ngàn) tệp chứa ít nhất 1KB dữ liệu ngẫu nhiên.
Ví dụ,
Name size
file1.01 2K
file2.02 3K
file3.03 5K
etc.
Làm thế nào tôi có thể tạo nhiều tập tin như thế này?
Câu trả lời:
Vì bạn không có bất kỳ yêu cầu nào khác, nên một cái gì đó như thế này sẽ hoạt động:
#! /bin/bash
for n in {1..1000}; do
dd if=/dev/urandom of=file$( printf %03d "$n" ).bin bs=1 count=$(( RANDOM + 1024 ))
done
(điều này cần bashít nhất cho {1..1000}).
bashvì nhiều lý do, bao gồm $((…))và $RANDOM. Thậm chí $(…)có thể không tồn tại trong mọi vỏ.
bashhay họ đã bắt nguồn từ bash ( {1..1000}đến từ zsh, for n in...; donevà mở rộng biến xuất phát từ vỏ Bourne, $(...), $((...))và $RANDOM đến ksh). Các tính năng không phải là POSIX là {1..1000}, $RANDOMvà /dev/urandom.
"%04d"trong trường hợp nào bashhoặc zshcó thể làm gì {0001..1000}với khôngprintf
Một biến thể với seq, xargs, ddvà shuf:
seq -w 1 10 | xargs -n1 -I% sh -c 'dd if=/dev/urandom of=file.% bs=$(shuf -i1-10 -n1) count=1024'
Giải thích theo yêu cầu cho mỗi bình luận:
seq -w 1 10in một dãy số từ 01 đến 10
xargs -n1 -I%thực thi lệnh sh -c 'dd ... % ...'cho mỗi số thứ tự thay thế % bằng nó
dd if=/dev/urandom of=file.% bs=$(shuf ...) count=1024tạo các tệp được cung cấp từ / dev / urandom với 1024 khối với kích thước khối
shuf -i1-10 -n1một giá trị ngẫu nhiên từ 1 đến 10
Bạn có thể làm một cái gì đó như thế này:
#!/bin/bash
filecount=0
while [ $filecount -lt 10000 ] ; do
filesize=$RANDOM
filesize=$(($filesize+1024))
base64 /dev/urandom |
head -c "$filesize" > /tmp/file${filecount}.$RANDOM
((filecount++))
done
Điều này sử dụng một đường ống dẫn duy nhất và có vẻ khá nhanh, nhưng có giới hạn là tất cả các tệp có cùng kích thước
dd if=/dev/urandom bs=1024 count=10240 | split -a 4 -b 1k - file.
Giải thích: Sử dụng dd để tạo 10240 * 1024 byte dữ liệu; chia nó thành 10240 tệp riêng biệt mỗi tệp 1k (tên sẽ chạy từ 'file.aaaa' đến 'file.zzzz')