2016-05-23 1 views
0

Я пытаюсь написать сценарий оболочки, который будет записывать вывод другого скрипта в файл, и он будет писать на то, что до определенного и затем перезапишет файл, чтобы размер файла оставался в пределах ограниченного диапазона.Shell Script для записи в файл до определенной точки, а затем сохранить перезапись файла

while true 
do 
    ./runscript.sh > test.txt 
    sleep 1 
done 

Я попытался использовать бесконечный цикл и поспать, чтобы он сохранил эту запись.

Но, это показывает другое поведение. Пока команда точки не запущена, размер файла увеличивается. Но, когда я останавливаю команду, размер файла уменьшается.

Как я могу перезаписать тот же файл и сохранить размер файла вместе с ним.

+0

Возможно, вы могли бы поделиться тем, что работает на рабочем столе. Это из моего воображения. –

+0

Он просто продолжает генерировать непрерывные журналы. –

+0

так что сам скрипт.sh является бесконечным циклом? Это может быть запрограммировано так? Почему это не так? –

ответ

0

Я сделаю ниже сценарий

#!/bin/sh 

Logfile=test.txt 
minimumsize=100000 # define the size you want 
actualsize=$(wc -c <"$Logfile") 
if [[ $actualsize -ge $minimumsize ]]; then 
    rm -rf "$Logfile" 
    sh ./runscript.sh >> test.txt 
else 
    #current_date_time="`date +%Y%m%d%H%M%S`"; #add this to runscript.sh to track when it was written 
    #echo "********Added at :$current_date_time ********" #add this to runscript.sh to track when it was written 
    sh ./runscript.sh >> test.txt 
fi 
+0

Я меняю минимальный размер = 1000. Но он по-прежнему генерирует файл с размером '23839 24 мая 11:24 test.log'. Как только я остановлю скрипт, размер файла уменьшится. Как я могу изменить это, чтобы сгенерировать новый файл после достижения минимального размера и удалить старый. –

+0

@shubhamdeodia Я понимаю проблему, если однократное выполнение runcript.sh приводит к тому, что размер файла идет> 1000, тогда мы не удаляем файл. Он будет проверять только в следующий раз при выполнении скрипта. – Mowgli

+0

@shubhamdeodia. Другой подход, о котором я могу думать, - написать код для отслеживания размера файла в runcript.sh рекурсивно, и если он достигнет предела, очистите файл и продолжите свой скрипт. – Mowgli

0

использования truncate -s <size> <file>, чтобы уменьшить размер файла, если его размер из вашей границы

0

Я могу попробовать с возможностью для создания нового файла, как только старый один полный. ... Как создать сценарий для создания нового файла и записи на него.

Следующий сценарий, назовем его chop.sh, делает это; вы используете его, подавая на него вывод, указав желаемый размер файла и имя в качестве аргументов, например. г. ./runscript.sh|chop.sh 999999 test.txt.

File=${2?usage: $0 Size File} 
Size=$1 
while 
    set -- `ls -l "$File" 2>/dev/null` # 5th column is file size 
    [ "$5" -lt "$Size" ] || mv "$File" "$File"-old 
    read -r && echo "$REPLY" >>"$File" 
do : 
done 

старый (полный) файл затем будет назван test.txt-old.