На серверах могут скапливаться горы файлов, которые периодически нужно удалять. Например, логи, скомпилированные версии файлов, или любой другой файловый кеш, генерируемый скриптами.
Рано или поздно эти горы приходится вычищать:
$ rm /tmp/logs/*.log
Если количество файлов будет критично большим, в какой-то момент вместо удаления файлов мы увидим такое сообщение в консоли:
/bin/rm: Argument list too long.
Что это означает?
Дело в том, что использование маски в командах типа rm/cp/find линукс переводит в удобный для себя формат, делая из понятной человеку команде:
$ rm /tmp/logs/*.log
список файлов под этой маской:
$ rm /tmp/logs/1.log /tmp/logs/2.log /tmp/logs/3.log ...
Проблемы начинаются, когда аргументов у команды rm становится больше допустимого лимита. Проверить этот лимит можно с помощью команды getconf:
$ getconf ARG_MAX 262144
И что все-таки делать?
Самый простой способ — выполнить нужную нам команду в цикле for, у которого есть два важных преимущества. Во-первых, циклы нересурсоемкие и не имеют лимитов на количество аргументов. Во-вторых, в цикл просто завернуть дополнительную логику, если потребуется делать что-то сложнее, чем удаление файлов.
Например, вот так можно удалить все файлы одной командой:
$ for f in /tmp/logs/*.log; do rm "$f"; done
Или удалить файлы, которые старше семи дней:
for f in /tmp/logs/*.log do find $f -mtime +7 -exec rm {} \; done
Или посчитать, записать в переменную и вывести их количество:
FILES_COUNT=`c=0; for f in /tmp/logs/*.log ; do ((c++)); done ; echo $c` echo "$FILES_COUNT log files left";
Самое главное
Этот текст был написан несколько лет назад. С тех пор упомянутые здесь инструменты и софт могли получить обновления. Пожалуйста, проверяйте их актуальность.
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…
Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…