LINUX.ORG.RU
ФорумAdmin

[need help] сортировка вывода ls


0

0

Здравствуйте.
есть файлы:

file_011206.log
file_021206.log
file_031206.log
file_041206.log
file_051206.log
file_221106.log
file_231106.log
file_241106.log
file_251106.log
file_261106.log
file_271106.log
file_281106.log
file_291106.log
file_301106.log

(Создаются каждый день)

Нужно удалять старые и оставлять файлы созданные не более недели назад.
В cron положил скрипт со следующим содержанием:

cd /usr/test/logs/; rm `ls -1 file_*.log | sort -r | tail +8`;

Однако удаляет он вот так:

file_241106.log
file_251106.log
file_261106.log
file_271106.log
file_281106.log
file_291106.log
file_301106.log

Т.е. при переходе на следующий месяц(год) сортировка начинает работать не правильно.(что видно выше)

соответственно вопрос, как бы список так отсортировать, чтобы даты были нормальными датами?

Есть вариант, так же, изменить нумерацию файлов сменив - день месяц год, на - год месяц день.

Буду рад ключевым словам гугла и другим полезным советам.
Спасибо.


find /to/gde/eta/hren -type f -mtime +toto -delete

Давно не писал на шеле. Позабывал, но вообще это один из самых простых способов. Хотя можно и так:

sub R_fuck_remove {
159
160
161
162 opendir(MDIR, "$dir") or die "can't opendir $dir:$!\n";
163 while ($i = readdir(MDIR)) {
164 next if $i =~ /^\.\.?$/;
165 $s_ort{$i} = (stat("${dir}${i}"))[9];
166 }
167 closedir(MDIR);
168
169 my ($v, $k);
170 @count = ();
171 while(($v, $k) = each(%s_ort)) {
172 push(@count, "$k");
173 }
174
175 @count = sort {$::a <=> $::b} @count;
176
177 ALLDEL: for ($i = 0; $i != $nfiles; $i++) {
178 my ($a, $b, $c);
179
180 if (($#count + 1) >= "$nfiles") {
181 opendir(MDIR, "$dir") or die "can't opendir $dir:$!\n";
182 while ($a = readdir(MDIR)) {
183 next if $i =~ /^\.\.?$/;
184 $b = (stat("${dir}${a}"))[9];
185 $c = $count[0];
186 if ($b == $c) {
187 unlink("${dir}$a") or die "can't unlink ${dir}${i}:$!\n";
188 shift(@count);
189 redo ALLDEL;
190 }
191 }
192 } else { exit(0); }
193 }
194
195 }

paranormal ★★
()

Юзай для этого find. Критерий отбора время. man find

I3rain
()

> Есть вариант, так же, изменить нумерацию файлов сменив - день месяц год, на - год месяц день.

Обычно так и делается. :)

ero-sennin ★★
()


Решил сделать нормальную нумерацию - год месяц день. Так как даты файлов - вещь вещь очень неудобная. Особенно пока пытаешься заставить скрипт работать, а он выводит, что-то невообразимое :)

Всем спасибо за помощь.

Chu_
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.