Я собираюсь сжать большой каталог, и я хочу знать, насколько большим будет размер получаемого файла.
Я пытался использовать du
:
$ tar -cv dir | du -h -
du: cannot access '-': No such file or directory
Затем я попытался использовать версию файла '-':
$ tar -cv dir | du -h /dev/stdin
1.0K
Я уверен, что это число не точное. Как я могу получить размер стандартного ввода?
wc
лишнее,-
то и последующаяcut
команда вам не нужна .С GNU
tar
вы можете просто сделать:... который будет выводить как ...
... на stderr. Точно так же с любым tar (или потоком) вы можете использовать
dd
для доставки отчета о количестве байтов. Это может быть или не быть предпочтительнымwc
, но поdd
умолчанию размер блока составляет 512 байт, что соответствуетtar
размеру блока в России. Если PIPE_BUF вашей системы достаточно велик, вы можете даже увеличитьdd
размер блока до соответствияtar
размеру записи - который составляет 20 блоков или 10240 байт. Нравится:Это может или не может предложить более эффективное решение, чем
wc
.В обоих
dd
иtar
потребительных случаях вам не нужно на самом деле избавиться от потока, хотя. Я перенаправил на/dev/null
выше - но я мог так же легко перенаправить на какой-то файл и все же получить отчет о его размере на момент его написания.источник
dd
(по сравнению сwc
).dd
выходные данные передаются - скажем, в компрессор - и по любой причине вы считаете желательным знать как сырой размер архива, так и сжатый. Также полезно получить мгновенный отчет о количестве записей -tar
это не просто архив, а потоковый формат. Его можно использовать не только для сохранения в группу файлов, но и в другой файл. Это часто полезно для блокировки потока перед его изменением. На каждой из этих границ записи находится целый блок NUL.Я бы предложил:
Простой
c
(ведение-
не требуется) используется для созданияtar
архива,f
указывает выходной файл и-
обозначает, что это будет стандартный вывод . (Обратите внимание , что если вы хотите только размер и есть много файлов под реж вы можете довольно Опуститьtar
«sv
соображения производительности.)источник
tar
в прошлом я работал с s, где требовалось указать tar-файл (таким образомf
и-
). - Просто посмотрел; без предполагается по умолчанию.f
-
tar
/etc/mt0
/etc/mt0
самом деле означает - «магнитная лента» ;-) Мне было бы интересно, какtar
ведет себя Solaris (потому что Solaris - одна из современных ОС, о которой известно, что в ней все еще очень старые вещи/bin
).-f
флагаtar
?Формулировка вашего вопроса поддается
tar ... | wc -c
ответам выше. Первоначально я прочитал ваш вопрос с молчаливым предположением, что вы хотели, чтобы о размере сообщали во время создания файла tar (возможно, вывод tar затем передавался по сетевой ссылке?).В этом случае я бы предложил
pv
- просмотрщик трубы. Я видел ссылку на это, но еще не было возможности поиграть с ним.Ссылки
источник