Mam plik, który chcę wypełnić, aż osiągnie 16 MiB (16777216 bajtów). Obecnie jest to 16515072 bajtów. Różnica wynosi 262144 bajtów.
Jak to zrobić?
To nie wydaje się działać:
cp smallfile.img largerfile.img
dd if=/dev/zero of=largerfile.img bs=1 count=262144
bs=1
indd
jest w moim doświadczeniu bardzo Runtime drogie.truncate -s 16M thefile
Odpowiedzi:
Upuść
of=largerfile.txt
i dołącz stdout do pliku:źródło
seek
jest tutaj właściwą opcją.Oprócz odpowiedzi, aby uzyskać fizyczne wypełnienie, możesz również pozostawić większość miejsca wypełniania w pliku po prostu puste („dziury”),
seek
przechodząc do nowej pozycji końcowej pliku i wpisując pojedynczy znak:(co ma tę zaletę, że jest znacznie wydajniejsze, szczególnie z
bs=1
, i nie zajmuje dużej ilości dodatkowego miejsca na dysku).Ta metoda wydaje się działać nawet bez dodawania żadnego znaku, przy użyciu
if=/dev/null
i końcowej żądanej wielkości pliku:Wydajny wariant fizycznego wypełnienia, który wykorzystuje większe rozmiary bloków, to:
źródło
truncate -s +262144 largerfile.txt
byłoby również szybko.Najlepszą odpowiedzią jest tutaj Janis (powyżej), ponieważ pozwala zapomnieć o bieżącym rozmiarze pliku i wpisać bezpośrednio żądany rozmiar bez obliczeń.
Wykorzystuje także rzadkie pliki, których nie dołącza / dev / zero.
Odpowiedź może być bardziej uporządkowana, ponieważ „count” może wynosić 0, a Ty wciąż dostajesz dopełnienie:
(Edycja: jest to poprawne dla GNU dd, ale zachowanie
count=0
jest specyficzne dla platformy, patrz komentarze)źródło
count=0
jest nieokreślony, ale zazwyczaj jest taki sam jak wtedy, gdy niecount
określono żadnego parametru. Więcej problemów:dd
obcina plik do 16777216 bajtów, ale jeśli masz nadzieję, że spowoduje to powstanie dziury na końcu, mylisz się, ponieważ najpierw musisz zapisać dane po dziurze, a później przyciąć go do rozmiaru, który nie zawiera danych .dd if=/dev/zero of=somefile
to to samo codd if=/dev/zero of=somefile count=0
? Spróbuj.count=0
jest taki sam, jakby w ogóle nie określono parametru count. Dotyczy to przynajmniej wszystkich implementacji pochodzących z oryginalnych źródeł. Spróbuj, wygląda na to, że nigdy nie pracowałeś z oryginalnymdd
poleceniem.count
oznaczającą „zignoruj ten parametr”. Czy możesz znaleźć Bez takiej dokumentacjicount=0
oznacza „napisz zero bloków”, a każde odchylenie od tego jest błędem ... (oryginalne źródła lub nie).Czy musisz użyć
dd
? Jeśli chcesz, aby plik miał określoną (logiczną) długość, po prostu wpisz zero w wybranej pozycji. Bajty między poprzednim końcem a bajtem zapisanym będą wyświetlane jako bajty puste. Oto przykład użycia perla.Dlaczego „- 2” w linii? Skrypt napisze bajt, więc odejmujemy 1, aby wyszukać pozycję przed tym bajtem. Zdejmujemy drugą, ponieważ pozycja szukania jest zerowana.
źródło