Оставить в директории только три последние, по списку, файлаВот список файлов:
# ls vzdump-qemu-502-*.log
vzdump-qemu-502-2017_08_11-03_15_02.log vzdump-qemu-502-2017_08_14-03_15_03.log vzdump-qemu-502-2017_08_17-03_15_01.log vzdump-qemu-502-2017_08_20-03_15_03.log
vzdump-qemu-502-2017_08_12-04_20_32.log vzdump-qemu-502-2017_08_15-03_15_02.log vzdump-qemu-502-2017_08_18-03_15_02.log vzdump-qemu-502-2017_08_21-03_15_02.log
vzdump-qemu-502-2017_08_13-03_15_03.log vzdump-qemu-502-2017_08_16-03_15_03.log vzdump-qemu-502-2017_08_19-04_22_59.logНужно оставить только эти три файла:
# ls vzdump-qemu-502-*.log | tail -3
vzdump-qemu-502-2017_08_19-04_22_59.log
vzdump-qemu-502-2017_08_20-03_15_03.log
vzdump-qemu-502-2017_08_21-03_15_02.logОстальные удалить.
Вижу алгоритм:
1) переименовать файлы, оставленные жить.
2) удалить весь список файлов к удалению
3) переименовать обратно файлыХочется по-проще...
> Хочется по-проще...Сделал так:
vmid=502
ls vzdump-qemu-$vmid-*.log | sed '$d' | sed '$d' | sed '$d' | xargs -n1 rm
>> Хочется по-проще...
> Сделал так:
>
> vmid=502
> ls vzdump-qemu-$vmid-*.log | sed '$d' | sed '$d' | sed '$d' |
> xargs -n1 rm
>-n1 не нужен,
"xargs --no-run-if-empty rm"+
Конечно, коллеги с -0 тоже подскажут что.+
$ seq 1 |head -n -3
$ seq 2 |head -n -3
$ seq 3 |head -n -3
$ seq 4 |head -n -3
1
$ seq 7 |head -n -3
1
2
3
4
$ _
>>> Хочется по-проще...
>> Сделал так:
>>
>> vmid=502
>> ls vzdump-qemu-$vmid-*.log | sed '$d' | sed '$d' | sed '$d' |
>> xargs -n1 rm
>>
> -n1 не нужен,
> "xargs --no-run-if-empty rm"Нужен.
Иначе мы нарываемся на лимит длины строки-списка в шелле.
>[оверквотинг удален]
> vzdump-qemu-502-2017_08_19-04_22_59.log
> vzdump-qemu-502-2017_08_20-03_15_03.log
> vzdump-qemu-502-2017_08_21-03_15_02.log
>
удалить все файлы старше 3-х дней?
find /путь/vzdump-qemu-502* -type f -mtime +3 -exec rm -rf {} \;
> удалить все файлы старше 3-х дней?
> find /путь/vzdump-qemu-502* -type f -mtime +3 -exec rm -rf {} \;Нет. Виртуалки или бэкапинг могут быть выключены, а три последние копии должны храниться всегда.
# ls -1 -t *.log|sed -ne '4,129p'|xargs -n1 rm -f# ls -1 -t *.log|awk 'NR==4,NR==150'|xargs -n1 rm -f
> Нужно оставить только эти три файла:Не нужно, проверенно с 1992 года. :)))
>> Нужно оставить только эти три файла:
> Не нужно, проверенно с 1992 года. :)))Кстати, да! logrotate же. Поставить/использовать/задействовать. Инемучить баш.
> Оставить в директории только три последние, по списку, файла
> Остальные удалить.
> Хочется по-проще...mkdir .0 && mv $(ls | tail -n3) .0 && rm -f ./* && mv .0/* ./ && rmdir .0 && echo "Vse..."