Назад | Перейти на главную страницу

Какую команду Unix я могу использовать, чтобы установить ограничение в 100 файлов в папке?

Я хочу удалить самые старые файлы в каталоге после 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; в других системах будут свои собственные эквивалентные программы).