URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 10174
[ Назад ]

Исходное сообщение
"Оставить в директории только три последние, по списку, файла"

Отправлено universite , 22-Авг-17 01:02 
Оставить в директории только три последние, по списку, файла

Вот список файлов:


# 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) переименовать обратно файлы

Хочется по-проще...


Содержание

Сообщения в этом обсуждении
"Оставить в директории только три последние, по списку, файла"
Отправлено universite , 22-Авг-17 02:14 
> Хочется по-проще...

Сделал так:


vmid=502
ls vzdump-qemu-$vmid-*.log | sed '$d' | sed '$d' | sed '$d' | xargs -n1 rm


"Оставить в директории только три последние, по списку, файла"
Отправлено Andrey Mitrofanov , 22-Авг-17 09:06 
>> Хочется по-проще...
> Сделал так:
>
 
> 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
$ _


"Оставить в директории только три последние, по списку, файла"
Отправлено universite , 22-Авг-17 15:45 
>>> Хочется по-проще...
>> Сделал так:
>>
 
>> vmid=502
>> ls vzdump-qemu-$vmid-*.log | sed '$d' | sed '$d' | sed '$d' |
>> xargs -n1 rm
>>

> -n1 не нужен,
> "xargs --no-run-if-empty rm"

Нужен.
Иначе мы нарываемся на лимит длины строки-списка в шелле.


"Оставить в директории только три последние, по списку, файла"
Отправлено ЫЫ , 22-Авг-17 09:46 
>[оверквотинг удален]
> 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) переименовать обратно файлы
> Хочется по-проще...

удалить все файлы старше 3-х дней?

find /путь/vzdump-qemu-502* -type f -mtime +3 -exec rm -rf {} \;


"Оставить в директории только три последние, по списку, файла"
Отправлено universite , 22-Авг-17 15:46 

> удалить все файлы старше 3-х дней?
> find /путь/vzdump-qemu-502* -type f -mtime +3 -exec rm -rf {} \;

Нет. Виртуалки или бэкапинг могут быть выключены, а три последние копии должны храниться всегда.


"Оставить в директории только три последние, по списку, файла"
Отправлено shadow_alone , 22-Авг-17 23:45 
# 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


"Оставить в директории только три последние, по списку, файла"
Отправлено pavlinux , 23-Авг-17 18:18 
> Нужно оставить только эти три файла:

Не нужно, проверенно с 1992 года. :)))


"Оставить в директории только три последние, по списку, файла"
Отправлено Andrey Mitrofanov , 24-Авг-17 09:23 
>> Нужно оставить только эти три файла:
> Не нужно, проверенно с 1992 года. :)))

Кстати, да!  logrotate же.  Поставить/использовать/задействовать. Инемучить баш.


"Оставить в директории только три последние, по списку, файла"
Отправлено мимопробегал , 29-Сен-17 01:26 
> Оставить в директории только три последние, по списку, файла
> Остальные удалить.
> Хочется по-проще...

mkdir .0 && mv $(ls | tail -n3) .0 && rm -f ./* && mv .0/* ./ && rmdir .0 && echo "Vse..."