Ответ 1
Вы передаете вывод watch
в awk
. Если вы упростите свою командную строку, то у вас есть:
watch <some arguments> | awk '{print $5}'
Это не то, что вы хотите. Попробуйте:
watch -n 5 "ls -lh club_prod.sql | awk '{print \$5}'"
Я хочу посмотреть растущий размер одного файла, поэтому я использую эту команду:
[email protected] ~$ ls -lh club_prod.sql | awk '{print $5}'
116M
Теперь я хочу посмотреть этот результат каждые 5 секунд так:
[email protected] ~$ watch -n 5 ls -lh club_prod.sql | awk '{print $5}'
но эта команда не возвращает никакого результата
Вы передаете вывод watch
в awk
. Если вы упростите свою командную строку, то у вас есть:
watch <some arguments> | awk '{print $5}'
Это не то, что вы хотите. Попробуйте:
watch -n 5 "ls -lh club_prod.sql | awk '{print \$5}'"
watch -n 5 "du -h club_prod.sql"
Не совсем связано, но если вы хотите отслеживать скорость роста какого-либо файла, вы можете использовать следующую команду:
tail -f yourfile.txt | pv >/dev/null
tail -f
- выводит данные, добавленные в файл pv
- измеряет поток данных через канал >/dev/null
- стандартный вывод отбрасывается Примечание: иногда pv
может быть не предустановлен
Надеюсь, это кому-нибудь поможет :)
Вам нужно процитировать конвейер так, чтобы он выполнялся в пределах watch
.
watch -n 5 "ls -lh club_prod.sql | awk '{print \$5}'"
Обратите внимание также, что \
добавлен в \$5
, потому что внешние кавычки теперь являются двойными кавычками, в которых $
-переменные расширяются. (Другие методы цитирования, как правило, более уродливые, чем это.)
watch -n 5 "ls -lh club_prod.sql | awk '{print \$5}'"
Использование watch
является правильным, но использование ls
я бы избегал. Я бы порекомендовал использовать stat
или du
, но это зависит от того, что вы хотите.
du
: Если вы хотите, чтобы место заняло на вашем дискеstat
: если вы хотите количество байтов, которое содержит ваш файл (сколько байтов я могу прочитать из файла)Представьте себе, что вы работаете со сжатой файловой системой или с разреженными файлами, внутренней фрагментацией, косвенными блоками...
В обоих случаях результатом будет:
$ watch -n 5 'stat --printf "%s\n" file'
$ watch -n 5 'du -B1 file'
Оба результата могут быть получены с помощью команды stat
:
$ watch -n 5 'stat --printf "%s %b %B\n" file'
Произведение двух последних столбцов является результатом du
.
Для быстрого детального просмотра роста файла каждые 0,1 секунды:
watch -n 0.1 "ls -l /mnt/some/file | awk '{print \$5}' | sed -re ' :rep ; s/([0-9])([0-9]{3})($|[^0-9])/\1,\2\3/ ; t rep '"
Это даст что-то вроде 62 673 539 072.
Вы можете выполнить это так:
while true; do
du -s **file_or_directory**
sleep **time_interval**
done
#!/bin/bash
# Watch File Size and Growth
# Author: Marcelo Pacheco - [email protected]
# Syntax: watchfilesize filetomonitor
nm="$1"
while true
do
sz=$(stat -c %s "$nm")
sleep 1m
sz1=$(stat -c %s "$nm")
echo Growth: $(((sz1-sz)/1024))KB/min Size: $((sz1/1024/1024))MB
sz=$sz1
done