Znalazłem sposób w Windows na zrobienie czegoś takiego
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/
Czy w systemie UNIX istnieje sposób na skopiowanie pliku, dołączenie, a następnie powtórzenie procesu? Coś takiego for .. cat file1.txt > file1.txt
?
for i in {1..1000000};do echo "string" >> file;done
w bash.type file >> file
się uruchomić w nieskończonej pętli (przynajmniej gdy będzie wystarczająco duży, aby nie zmieścił się w buforze).Odpowiedzi:
Z
csh
/tcsh
:Z
zsh
:W systemach GNU zobacz także:
Lub:
(tworzy rzadki plik 10TiB (bardzo duży, ale nie zajmuje miejsca na dysku)) i inne alternatywy omówione w temacie „Utwórz plik testowy z dużą ilością zerowych bajtów” .
Robienie
cat file >> file
byłoby złym pomysłem.Po pierwsze, nie działa z niektórymi
cat
implementacjami, które odmawiają odczytu plików, które są takie same jak ich plik wyjściowy. Ale nawet jeśli obejdziesz ten procescat file | cat >> file
, jeślifile
jest większy niżcat
bufor wewnętrzny, spowodowałobycat
to uruchomienie w nieskończonej pętli, ponieważ w rezultacie odczytałby wcześniej zapisane dane.W systemach plików zabezpieczonych obrotowym dyskiem twardym byłoby to również dość nieefektywne (po osiągnięciu rozmiaru większego niż prawdopodobnie buforowany w pamięci), ponieważ dysk musiałby iść w tę iz powrotem między miejscem, w którym można odczytać dane, i gdzie to napisać.
źródło
dd if=/dev/zero of=large-file bs=1024 count=1024
plik 1 MBdd if=/dev/zero of=test bs=1M count=1
jaśniejszy.dd
, ale nigdy nie rozumiem dlaczego. W rzeczywistości myślę, że użyłem go tylko do odczytu MBR lub podobnych zadań pobocznych. Z mojego doświadczenia wynika, że inne narzędzia są szybsze, prostsze i bezpieczniejsze w zdecydowanej większości przypadków, w których ludzie używajądd
. Myślę, że jest to jeden z tych przypadków, w których częste! = Optymalne, takie jaksudo su
lubcat file | grep foo
.Możesz utworzyć duży plik w systemie Solaris, używając:
Kolejny sposób, który działa w systemie Solaris (i Linux):
Możliwe jest również użycie:
źródło
truncate
istnieje w systemie Solaris 11.2+Najszybszym możliwym sposobem utworzenia dużego pliku w systemie Linux jest
fallocate
:fallocate
manipuluje systemem plików i faktycznie nie zapisuje domyślnie w sektorach danych, i jako taki jest niezwykle szybki. Minusem jest to, że musi być uruchamiany jako root.Uruchamiając go kolejno w pętli, możesz wypełnić największy system plików w ciągu kilku sekund.
Od
man fallocate
źródło
To będzie kontynuowane, dopóki nie CTRL-C:
yes This is stuff that I want to put into my file... >> dummy.txt
Bądź jednak ostrożny, ponieważ możesz uzyskać setki tysięcy linii na sekundę ...
Od
man yes
:źródło
yes $BIG_STRING | head -c $TARGET_SIZE >> dummy.txt
pozwoli ci uzyskać dokładną kwotę. (-n $ TARGET_NUMBER_OF_LINES).yes
automatycznie umrze w wyniku „zepsutej rury”, gdy zostaniehead
zakończona, ponieważ liczba docelowa została osiągnięta.Jeśli dobrze cię rozumiem, szukasz czegoś takiego:
Spowoduje to utworzenie pliku z 22 powtórzeniami „linii testowej”. Jeśli chcesz określonego rozmiaru pliku, możesz użyć czegoś takiego (w systemie Linux). 1024 to jeden kilobajt:
Osobiście, gdy chcę utworzyć duży plik, używam dwóch plików i łączę je między sobą. Możesz powtarzać proces, aż osiągniesz pożądany rozmiar (tutaj 1 MB):
Pamiętaj, że to rozwiązanie często przekracza pożądany rozmiar, ponieważ jeśli plik jest poniżej limitu, wszystko zostanie do niego ponownie przywrócone.
Wreszcie, jeśli wszystko, czego chcesz, to plik o pożądanym rozmiarze i nie musisz go tak naprawdę zawierać, możesz użyć
truncate
:źródło
cat
jednak dodanie pliku ma jakąkolwiek zaletę? Wydawałoby się, że zajęłoby to dłużej, ponieważ musi rozwidlać dwa procesy w każdej pętli, a także przenosić całą zawartość wiele razy.cat
Podejście jest dużo, dużo szybciej. Ma to sens tylko przy tworzeniu ogromnych plików, ale utworzyło to plik 545M w 10 sekund na moim komputerze. Ta samawhile
pętla zecho "test line" >> file
utworzonym plikiem 96K w tym samym czasie.truncate
pobliżu, możesztruncate -s 1G
utworzyć plik na pierwszym miejscu. unix.stackexchange.com/a/269184/85549 . Możesz zastąpić go przezhead -c $DESIRED_SIZE
, być może wwhile
pętli.Pipingując zawartość
/dev/urandom
dohead
możesz przekierować dane wyjściowe do pliku, więc:Otrzymasz plik ze 100 bajtami śmieci.
źródło
taki sam efekt skryptu Windows, ale w bash nie można bezpośrednio połączyć pliku z samym sobą.
źródło
.txt
rozszerzenia na końcu pozostawiasz 2 duże pliki.