Это возможно, но некрасиво:
echo {0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F}{0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F}
Насколько я могу судить, bash
не имеет понятия о шестнадцатеричных диапазонах.
Если вы хорошо разбираетесь в Perl, вы можете запустить этот небольшой скрипт:
use POSIX qw(strftime);
$fbase = "tmp-%Y-%m-%d-%H-%M.log";
while(<>)
{
$fnamenew = strftime $fbase, localtime;
if ($fnamenew ne $fname)
{
print "logging to: $fnamenew\n";
$fname = $fnamenew;
close OUT;
open OUT, ">$fname";
}
print OUT $_;
}
Используйте его так: $mycomputation | perl-скрипт.pl
. Он добавит все входные данные к имени файла, созданному из заданного шаблона времени, здесь tmp-ГГГГ-ММ-ДД-ЧЧ-MI.log
. На каждой новой строке ввода шаблон перестраивается и сверяется со старым. Если он отличается, то ввод передается в новый файл, а старый закрывается.
Проблема в том, что ваш файл журнала остается открытым приложением, которое записывает в него данные. Если вы обрежете файл (> file.log
), ваше приложение все равно будет писать в него с точки последней записи (из-за усечения, я полагаю, что ваш файл будет заполнен 0 байтами до этой точки ). Если вы переместите файл, ваше приложение продолжит запись в него, поскольку после открытия его имя не имеет значения. Если вы удалите файл, блоки не будут освобождены с диска, и приложение по-прежнему будет записывать их, даже если файл больше не виден в вашем каталоге.
Это классический сценарий. Ваше приложение должно:
В противном случае вы ничего не сможете сделать извне, кроме перезапуска приложения. Затем вы должны сделать это так же, какlogrotate
:
touch
файл журнала со старым именем, чтобы файл существовал