Saya menemukan cara di Windows untuk melakukan hal seperti itu
echo "This is just a sample line appended to create a big file. " > dummy.txt
for /L %i in (1,1,21) do type dummy.txt >> dummy.txt
http://www.windows-commandline.com/how-to-create-large-dummy-file/
Apakah ada cara di UNIX untuk menyalin file, menambahkan dan kemudian mengulangi prosesnya? Sesuatu seperti for .. cat file1.txt > file1.txt
?
for i in {1..1000000};do echo "string" >> file;done
di bash.type file >> file
untuk berjalan dalam loop yang tak terbatas (setidaknya segera setelah itu cukup besar sehingga tidak muat di buffer).Jawaban:
Dengan
csh
/tcsh
:Dengan
zsh
:Pada sistem GNU, lihat juga:
Atau:
(membuat file jarang 10TiB (sangat besar tetapi tidak memakan ruang pada disk)) dan alternatif lain yang dibahas di "Buat file uji dengan banyak nol byte" .
Melakukan
cat file >> file
ide yang buruk.Pertama, itu tidak bekerja dengan beberapa
cat
implementasi yang menolak untuk membaca file yang sama dengan file outputnya. Tetapi bahkan jika Anda mengatasinya dengan melakukancat file | cat >> file
, jikafile
lebih besar daricat
buffer internal, itu akan menyebabkancat
berjalan dalam infinite loop karena pada akhirnya akan membaca data yang telah ditulis sebelumnya.Pada sistem file yang didukung oleh hard drive rotasi, itu akan sangat tidak efisien juga (setelah mencapai ukuran yang lebih besar daripada yang mungkin di-cache dalam memori) karena drive harus bolak-balik antara lokasi tempat membaca data, dan di mana menulisnya.
sumber
dd if=/dev/zero of=large-file bs=1024 count=1024
untuk file 1MBdd if=/dev/zero of=test bs=1M count=1
lebih jelas.dd
, tapi saya tidak pernah mengerti mengapa. Bahkan, saya pikir saya hanya pernah menggunakannya untuk membaca MBR atau tugas-tugas pinggiran serupa. Dalam pengalaman saya, alat-alat lain lebih cepat, lebih sederhana dan lebih aman untuk sebagian besar kasus di mana orang menggunakandd
. Saya pikir ini adalah salah satu kasus di mana umum! = Optimal, sukasudo su
ataucat file | grep foo
.Anda dapat membuat file besar di Solaris menggunakan:
Cara lain yang berfungsi pada Solaris (dan Linux):
Dimungkinkan juga untuk menggunakan:
sumber
truncate
memang ada di Solaris 11.2+Cara tercepat untuk membuat file besar di sistem Linux adalah
fallocate
:fallocate
memanipulasi sistem file, dan tidak benar-benar menulis ke sektor data secara default, dan karenanya sangat cepat. Kelemahannya adalah ia harus dijalankan sebagai root.Menjalankannya secara berurutan dalam satu lingkaran, Anda dapat mengisi sistem file terbesar dalam hitungan detik.
Dari
man fallocate
sumber
Ini akan terus berjalan hingga Anda CTRL-C:
yes This is stuff that I want to put into my file... >> dummy.txt
Berhati-hatilah, karena Anda bisa mendapatkan ratusan ribu baris / detik ...
Dari
man yes
:sumber
yes $BIG_STRING | head -c $TARGET_SIZE >> dummy.txt
akan membiarkan Anda mendapatkan jumlah yang tepat. (-n $ TARGET_NUMBER_OF_LINES).yes
secara otomatis akan mati akibat 'pipa pecah' ketikahead
berakhir karena jumlah target telah tercapai.Jika saya mengerti Anda dengan benar, Anda mencari sesuatu seperti:
Itu akan membuat file dengan 22 pengulangan "test line". Jika Anda menginginkan ukuran file tertentu, Anda dapat menggunakan sesuatu seperti ini (di Linux). 1024 adalah satu kilobyte:
Secara pribadi, ketika saya ingin membuat file besar, saya menggunakan dua file dan cat satu ke yang lain. Anda dapat mengulangi prosesnya hingga mencapai ukuran yang diinginkan (1MB di sini):
Perhatikan bahwa solusi ini akan sering melebihi ukuran yang diinginkan karena jika file di bawah batas, semuanya akan dimasukkan lagi ke dalamnya.
Akhirnya, jika semua yang Anda inginkan adalah file dengan ukuran yang diinginkan dan tidak perlu benar-benar berisi apa pun, Anda dapat menggunakan
truncate
:sumber
cat
file sebenarnya memiliki keuntungan untuk hanya menambahkan? Tampaknya akan memakan waktu lebih lama karena harus memotong dua proses setiap loop dan juga memindahkan seluruh konten beberapa kali.cat
Pendekatan jauh, jauh lebih cepat. Masuk akal untuk membuat file besar tapi itu menciptakan file 545M dalam 10 detik pada mesin saya.while
Loop yang sama denganecho "test line" >> file
membuat file 96K dalam jumlah waktu yang sama.truncate
, Anda dapattruncate -s 1G
membuat file di tempat pertama. unix.stackexchange.com/a/269184/85549 . Anda bisa menggantinya denganhead -c $DESIRED_SIZE
, mungkin di dalamwhile
loop.Dengan memiparkan konten
/dev/urandom
ke,head
Anda dapat mengarahkan output ke file, jadi:Akan memberi Anda file dengan 100 byte sampah.
sumber
efek yang sama dari skrip windows Anda tetapi dalam bash, Anda tidak dapat menggabungkan file ke dirinya sendiri, secara langsung.
sumber
.txt
ekstensi, Anda meninggalkan 2 file besar di akhir.