удалить все (архивные) файлы из каталога оставляя только N последних

вопрос навичка
Дата: 25.01.2010 00:01:50
как удалить все (архивные) файлы из каталога оставляя только N (cкажем 7шт) последних (по времени создяния)
beginer.ua
Дата: 25.01.2010 00:24:05
/usr/bin/find /fs/bla/bla/ -name "*.7z" -mtime +7 -delete - найдет и удалит файлы в указанной директории старше 7 дней имеющих расширение 7z
ORAngutang
Дата: 25.01.2010 11:31:05
beginer.ua
/usr/bin/find /fs/bla/bla/ -name "*.7z" -mtime +7 -delete - найдет и удалит файлы в указанной директории старше 7 дней имеющих расширение 7z


спасибо, "не старше N-дней" я и сам нашел! Но проблема в том, что каждые четверть часа их может быть нагенерено очень много, и мне хватит просто скажем 3-х последних!
SSukholet
Дата: 26.01.2010 05:43:17

On Mon, 25 Jan 2010 15:31:05 +0700, ORAngutang <nospam@sql.ru> wrote:

> Автор: ORAngutang
> beginer.ua
> /usr/bin/find /fs/bla/bla/ -name "*.7z" -mtime +7 -delete - найдет и
> удалит
> файлы в указанной директории старше 7 дней имеющих расширение 7z
>
>
> спасибо, "не старше N-дней" я и сам нашел! Но проблема в том, что каждые
> четверть часа их может быть нагенерено очень много, и мне хватит просто
> скажем 3-х последних!
ну очевидно ls --sort=time | tail --lines 3
и, соответственно: rm -vf 'ls --sort=time /tmp | tail --lines 3'


--
Остаюсь искренне Ваш,
Станислав Сухолёт

Posted via ActualForum NNTP Server 1.4

SSukholet
Дата: 26.01.2010 05:45:33

On Tue, 26 Jan 2010 09:43:17 +0700, SSukholet <nospam@sql.ru> wrote:

> и, соответственно: rm -vf 'ls --sort=time /tmp | tail --lines 3'
Извиняюсь, апострофы не те: rm -vf `ls --sort=time /tmp | tail --lines 3`



--
Остаюсь искренне Ваш,
Станислав Сухолёт

Posted via ActualForum NNTP Server 1.4

skelet
Дата: 26.01.2010 09:31:08
SSukholet
Извиняюсь, апострофы не те: rm -vf `ls --sort=time /tmp | tail --lines 3`

а разве нельзя через $() вместо кавычек?
SSukholet
Дата: 26.01.2010 10:52:40

On Tue, 26 Jan 2010 13:31:08 +0700, skelet <nospam@sql.ru> wrote:

> Извиняюсь, апострофы не те: rm -vf `ls --sort=time /tmp | tail --lines 3`
>
> а разве нельзя через $() вместо кавычек?
конечно можно. просто по старой привычке bash'евца ;-)

rm -vf $(ls --sort=time /tmp | tail --lines=3)


--
Остаюсь искренне Ваш,
Станислав Сухолёт

Posted via ActualForum NNTP Server 1.4

вопрос навичка
Дата: 27.01.2010 14:38:36
SSukholet,

Спасибо, но ваш вариант удаляет 3 самых старых, а мне нужно удаление всех кроме 3 последних! ;-)

Вот уже и сам допер:

ls --sort=time -r *.dbf | tail --lines=3 >> last3 && ls --sort=time -r *.dbf | tail >> allf && rm -vf $(diff allf last3 | tail) $$ rm allf last3

Может кто-то предложит решенее по элегантнее!? ;-)

P.S. Кстати можно в Бэше отнять как-то 2 строки?
Типа:

'abcdef' - 'cde' = 'abf'
SerXX
Дата: 27.01.2010 16:14:53
вопрос навичка
SSukholet,

Спасибо, но ваш вариант удаляет 3 самых старых, а мне нужно удаление всех кроме 3 последних! ;-)

man ls:
-r Производить сортировку в обратном порядке.
SerXX
Дата: 27.01.2010 16:16:06
sorry, не то