Я хочу удалить самые старые файлы в каталоге после 100 файлов. Другими словами, я хочу убедиться, что в каталоге существует не более 100 файлов, и, если предел превышен, удалить самые старые файлы после ограничения. Я не хочу просто удалять файлы старше x дней, поскольку, если бы это было запущено в cronjob, в конечном итоге все файлы были бы удалены.
Думаю, если бы я запрограммировал это, псевдокод был бы таким:
list = dir.getFiles()
list.sortByDate()
deleteList = list.getSubList(100, end) // from, to
deleteAll(deleteList)
Итак, какой была бы подходящая команда Unix? я думаю find
как-то причастен к -exec
аргумент, но я не уверен в аспекте сортировки / ограничения.
find
не должно быть необходимости. Если вы сначала перейдете в правильный каталог,
rm -f `ls -rt | head -n -100`
указать путь
rm -f `ls -rt /path/to/my/dir | head -n -100`
и для cron
(в Ubuntu!)
/bin/rm -f `/bin/ls -rt /path/to/my/dir | /usr/bin/head -n -100`
Путь к команде можно определить с помощью which
, например
which ls
Наконец, если имена файлов содержат пробелы, их следует заключить в кавычки. ls -Q
затем отправлен xargs
/bin/ls -Qrt /path/to/my/dir | /usr/bin/head -n -100 | /usr/bin/xargs /bin/rm -f
(проверено на Ubuntu, для ваших тестов замените rm -f
с участием echo
чтобы увидеть, что нужно удалить)
Вы изобретаете колесо, называемое вращением бревен? В этом случае используйте logrotate (в системах Linux; в других системах будут свои собственные эквивалентные программы).