Якщо я хочу бігти, somecommand > somefileале зупинити його, коли він somefileдосягне певного розміру, як би це зробити?
Якщо я хочу бігти, somecommand > somefileале зупинити його, коли він somefileдосягне певного розміру, як би це зробити?
Відповіді:
somecommand | dd bs=1K count=2 iflag=fullblock > somefile
Це запише в файл рівно 2 KiB (менше, якщо somecommandперший закінчується). iflag=fullblockPOSIX не вимагає, ddможливо, він не підтримує його, команда, що містить iflag=fullblock, не є портативною. Порівняйте цей сценарій, щоб побачити, чому він може бути важливим.
Після обробки потрібної кількості блоків ( count=2у наведеному вище прикладі) ddприпиняється, це розриває трубу. Це залежить від somecommandтого, як він реагує на розбиту трубу. Дивіться це: Що робить процес Unix вмираючи з розбитою трубою?
Якщо кількість байтів, яку ви хочете зберегти, змушує вас використовувати деякі незручні bsта / або count, врахуйте це:
somecommand | { dd bs=1M count=1024 iflag=fullblock; dd bs=10 count=1 iflag=fullblock; } > somefile
Команда запише 1 GiB (= 1024 MiB) плюс 10 байт.
Деякі реалізації headдозволяють використовувати -cпараметр для отримання довільної кількості байтів. Це також не є портативним, параметр POSIX не вимагається.
Відповідно до цієї відповіді dd , вхідний блок розміром 1 ( ibs=1) - єдиний спосіб POSIX для зчитування точної кількості байтів.
Якщо ви somecommandгенеруєте текстовий вихід і хочете обмежити кількість рядків у файлі, headпроте це правильний інструмент. Це збереже лише перші 5 рядків (знову ж таки менше, якщо somecommandзакінчується перший):
somecommand | head -n 5 > somefile
-nВаріант headвимагає POSIX.
man ddтвій друг. :)
headробить останній)?
somecommandтого, як він реагує на розбиту трубу. Дивіться це: Що змушує процес Unix вмирати зі зламаною трубою? . У моєму Debian headзакінчується, тому він розриває трубу.