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}
).
bash
vì nhiều lý do, bao gồm $((…))
và $RANDOM
. Thậm chí $(…)
có thể không tồn tại trong mọi vỏ.
bash
hay họ đã bắt nguồn từ bash
( {1..1000}
đến từ zsh
, for n in...; done
và 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}
, $RANDOM
và /dev/urandom
.
"%04d"
trong trường hợp nào bash
hoặc zsh
có thể làm gì {0001..1000}
với khôngprintf
Một biến thể với seq
, xargs
, dd
và 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 10
in 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=1024
tạ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 -n1
mộ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')