Отправляет email-рассылки с помощью сервиса Sendsay

Удаление большого количества файлов

В каталоге более 2100 файлов. Как удалить файлы старее 2 недель?

find /var/other/dwn/tmp/*.log -ctime 14 -exec rm {} \;
-bash: /bin/find: Argument list too long

find /var/other/dwn/tmp/ -name "*.log" -ctime 14 -exec rm {} \;
Ничего не делает

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 28466; Возраст листа: 1192; Участников: 1683
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/604997

Ответить   Sun, 29 Oct 2006 20:26:03 +0300 (#604997)

 

Ответы:

В сообщении от 1162146363 секунд после начала Эпохи Dmitry A. Kharitonov написал(а):

$ man tmpwatch

Ответить   Konstantin Korikov Sun, 29 Oct 2006 20:02:33 +0200 (#605008)

 

Konstantin Korikov wrote:

tmpwatch обрабатывает все файлы в каталоге. это не подходит.
Можно ли как-то проверить дату последнего изменения в скипте?

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 28469; Возраст листа: 1192; Участников: 1683
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/605014

Ответить   Sun, 29 Oct 2006 21:18:49 +0300 (#605014)

 

В сообщении от 29 октября 2006 19:26 Dmitry A. Kharitonov написал(a):

tmpwatch тебя спасет

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 28468; Возраст листа: 1192; Участников: 1683
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/605009

Ответить   Sun, 29 Oct 2006 19:54:05 +0200 (#605009)

 

i586-PoltawerKozak-linux-gnu)

On Sun, 29 Oct 2006 19:54:05 +0200
Amper <amper_2***@r*****.ru> wrote:

^^^^^^^^^^^^^^^^^^^^^^^^

Дело в том что, длинна команди не может превишать какоето число, напр.
в моей машине уто 32К, а rm в етом случае получает строку большего
размера, чтоби обработать такую строку необходимо использовать
find /var/other/dwn/tmp/*.log -type f -ctime 14 | xargs rm
но я eтому тоже не доверяю и резултати find направляю во временний файл
которий после разбиваю split по 200 строк , после чего с помощью tr
обeдиняю 200 строк в одну строку и стравливаю rm зациклив стравливание
у for

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 28470; Возраст листа: 1193; Участников: 1683
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/605064

Ответить   Poltawer Kozak Sun, 29 Oct 2006 02:07:01 +0300 (#605064)

 

Dmitry A. Kharitonov пишет:

В свое время, то же мучался...
У командного интепретатора (bash) есть ограничение на длину командной
стоки... и не во всех случаях может помоч xargs, как написано в man.

Нодо было сделать перенос файлов по маске
вышел из ситуации так:

#!/bin/bash
CP_TO="/каталог/куда/переносим"
CP_FROM="/каталог/где/надо/искать"
#Маска файлов
FLS_MSK=`date --date "1 month ago" "+%y%m"`*

find $CP_FROM -name $FLS_MSK | while read FL
do
echo $FL
mv -f $FL $CP_TO/$MON 2>/dev/null
# Если при переносе была ошибка, то говорим об этом и выходим
RET1=$?
if [ $RET1 -ne 0 ]; then
echo "Was error # $RET1 at "`date +'%H:%M %d/%m/%Y'` >> $CP_TO/er
exit 1
fi
done

Можно вместо переноса сделать удаление...

Ответить   Mon, 30 Oct 2006 14:29:21 +0500 (#605141)

 

Мне нужно удалить файлы *.log (НЕ ВСЕ) и старше 2 недель.
но за идею спасибо.
У меня эта проблема дома. вечером проверю.

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 28482; Возраст листа: 1193; Участников: 1683
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/605161

Ответить   Mon, 30 Oct 2006 13:46:34 +0300 (#605161)

 

Kharitonov A. Dmitriy пишет:

Смотри другой пост.

Если эти логи постоянные и заешь их наименование, то можно
воспользоваться logrotate. В /etc/logrotate.d можешь записать свои
инструкции по работе с файлом.

Ответить   Mon, 30 Oct 2006 16:16:16 +0500 (#605178)

 

i586-PoltawerKozak-linux-gnu)

On Mon, 30 Oct 2006 16:16:16 +0500
Pavel Chmelev <pavel.chmel***@g*****.com> wrote:

Нормально с етим спавится find. Сначала поиграй сним, потому что у тебя
еше там как мiнимум 2 ошибки
1. не знаю можно ли find задавать каталог для поиска по маске
2. есть вероятность витереть директории в которих били создани
файли нужно обязательно задать -type f
3. нужно задать диапазон времени -ctime +ctime иначе будут вибрани
файли созлание за 1сутки, 14 дней назад, тоесть все что создано 15 дней
назад не войдет в список

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 28492; Возраст листа: 1193; Участников: 1683
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/605203

Ответить   Poltawer Kozak Sun, 29 Oct 2006 15:20:11 +0200 (#605203)

 

i586-PoltawerKozak-linux-gnu)

On Mon, 30 Oct 2006 16:16:16 +0500
Pavel Chmelev <pavel.chmel***@g*****.com> wrote:

И еще если берут сомненния делается что нибудь или нет к rm дай ключ -v

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 28493; Возраст листа: 1193; Участников: 1683
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/605204

Ответить   Poltawer Kozak Sun, 29 Oct 2006 15:38:50 +0200 (#605204)

 

лучше вместо rm ставить echo при отладке - и безопасно и наглядно

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 28494; Возраст листа: 1193; Участников: 1683
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/605211

Ответить   Mon, 30 Oct 2006 16:56:19 +0300 (#605211)

 

i586-PoltawerKozak-linux-gnu)

On Mon, 30 Oct 2006 16:16:16 +0500
Pavel Chmelev <pavel.chmel***@g*****.com> wrote:

Нормально с етим спавится find. Сначала поиграй сним, потому что у тебя
еше там как мiнимум 2 ошибки
1. не знаю можно ли find задавать каталог для поиска по маске
2. есть вероятность витереть директории в которих били создани
файли нужно обязательно задать -type f
3. нужно задать диапазон времени -ctime +ctime иначе будут вибрани
файли созлание за 1сутки, 14 дней назад, тоесть все что создано 15 дней
назад не войдет в список

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 28495; Возраст листа: 1193; Участников: 1683
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/605214

Ответить   Poltawer Kozak Sun, 29 Oct 2006 15:27:24 +0200 (#605214)

 

В сообщении от 1162211361 секунд после начала Эпохи Pavel Chmelev написал(а):

С чего Вы взяли что ограничение относиться к интерпретатору bash? Есть
ограничение на максимальный размер списка аргументов и списка
переменных окружения в семействе функций exec*.
См. execve(2), /usr/include/linux/limits.h

Вот тут оно и согнется если в текущем каталоге есть хоть один файл
соответствующий шаблону в переменной $FLS_MSK.

А что за переменная $MON ?

$ find /каталог/где/надо/искать \
-name `date --date '1 month ago' +%y%m`\* \
-exec mv -f \{\} /каталог/куда/переносим/ \;

$ find /каталог/где/надо/искать \
-name `date --date '1 month ago' +%y%m`\* -delete

Ответить   Konstantin Korikov Mon, 30 Oct 2006 12:57:12 +0200 (#605163)

 

Вот бы сюда еще *.log прикрутить было бы просто супер!
вечером по эксперементирую

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 28490; Возраст листа: 1193; Участников: 1683
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/605187

Ответить   Mon, 30 Oct 2006 15:27:23 +0300 (#605187)

 

В сообщении от 1162214843 секунд после начала Эпохи Kharitonov A. Dmitriy написал(а):

Вряд ли. Это команда не учитывает дату модификации или создания фала.
Это иллюстрация задачи немножко из другой оперы.

А в вашей задаче я бы Вам порекомендовал учесть стандарт на структуру
каталогов файловой системы (Filesystem Hierarchy Standard) и хранить
логи и временные файлы там где они и должны лежать, соответственно
`/var/log' и `/tmp'. Тогда на первый каталог Вы можете натравить
logrotate, а на второй tmpwatch, что собственно и делается во всех
дистрибутивах по дефолту.

Удачи!

Ответить   Konstantin Korikov Mon, 30 Oct 2006 17:33:36 +0200 (#605238)

 

Konstantin Korikov wrote:

Не совсем так: все зависит от специфики задачи.
В данном случае мне нужно, чтобы логи хранились вместе с временными
файлами, и удалялись через какое-то время после окончания работы с
временным файлом. Длительность работы с временным файлом может превысить
несколько месяцев и будет очень обидно, если система вмешается.
Относительно проблемы - то она решилась очень просто:
find /var/other/dwn/tmp/ -name "*.log" -mtime +14 -exec rm {} \;

Всем огромнейшее СПАСИБО за интересные идеи.

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 28505; Возраст листа: 1194; Участников: 1682
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/605387

Ответить   Tue, 31 Oct 2006 06:58:48 +0300 (#605387)

 

Konstantin Korikov пишет:

Тут с Вами спорить не буду...
В любом случае bash/sh/ksh/... будут вызывать функции семейства exec.

Не понял, что значит "согнется"? не будет работать, вылетит Argument
list too long?
Этот скрипт у меня работает давно.. он по крону запускается первого
числа месяца... в среднем обрабатывает 55000 файлов за раз...

Она выше определяется
MON=`date --date "1 month ago" "+%m"`
# Создаем каталог для перемещения, если он не существует
if [ ! -d $CP_TO/$MON ]; then
mkdir -p $CP_TO/$MON
fi

Просто при копировании в письмо строки потерял.. :-)

Спасибо за красивое/оптимальное решение...
Подправлю несколько скриптов :-)

Немного не понял в доке, если удаление удачное, то вернется true, иначе
выдаст сообщение об ошибке. Так вот это будет справедливо для каждого
файла удовлетворяющего маске или на все файлы?

Ответить   Mon, 30 Oct 2006 16:41:01 +0500 (#605193)

 

В сообщении от 1162219261 секунд после начала Эпохи Pavel Chmelev написал(а):

$ FLS_MSK=`date --date "1 month ago" "+%y%m"`*
$ echo $FLS_MSK
0609*
$ mkdir test
$ touch test/`date --date "1 month ago" "+%y%m"`-abc
$ ls test/*
test/0609-abc
$ find test -name $FLS_MSK
test/0609-abc
$ touch ./`date --date "1 month ago" "+%y%m"`-def
$ find test -name $FLS_MSK
$ touch ./`date --date "1 month ago" "+%y%m"`-ghi
$ find test -name $FLS_MSK
find: пути должны быть перед выражением
Usage: find [-H] [-L] [-P] [path...] [expression]

Теперь ясно или нужно разжевать подробнее? :)

Ну да, пока какой нибудь хакер не создаст файлики типа `~/0609-def' и
`~/0609-ghi'. А может быть этим хакером будете именно Вы когда просто
захотите подержать на время пару таких файлов в домашнем каталоге. Ведь
Вы неверно думали что содержимое домашнего каталога не виляет на работу
скрипта...

Если в документации что-то не понимаете, проверьте экспериментально.

$ rm -rf test
$ mkdir test
$ touch test/`date --date '1 month ago' +%y%m`-abc
$ touch test/`date --date '1 month ago' +%y%m`-def
$ touch test/other_file
$ ls test/*
test/0609-abc test/0609-def test/other_file
$ find test -name `date --date '1 month ago' +%y%m`\* -delete
$ ls test/*
test/other_file

Ответить   Konstantin Korikov Mon, 30 Oct 2006 16:23:53 +0200 (#605220)