Скрипт удаления файлов старше N дней

  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:90eba0bc0b9fa97a265be8f058a73b9b' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtejustify\">Для бекапирования данных можно использовать как специализированное ПО, так и самописные скрипты.</p>\n<p class=\"rtejustify\">В случае использования&nbsp;самописных скриптов, возникает необходимость периодически удалять архивы бекапов. Однако и этот процесс можно автоматизировать.</p>\n<p class=\"rtejustify\">Попытаемся максимально приблизить условия к боевым.</p>\n<p class=\"rtejustify\">Итак, имеется в наличии сервер, на котором в родительском каталоге (например, <strong>/backup</strong>) созданы подкаталоги,&nbsp;для&nbsp;хранения бекапов в зависимости от типа содержимого:</p>\n<ul>\n<li class=\"rtejustify\">конфигурации маршрутизаторов</li>\n<li class=\"rtejustify\">конфигурации коммутаторов</li>\n<li class=\"rtejustify\">конфигурации серверов</li>\n<li class=\"rtejustify\">данные с серверов</li>\n<li class=\"rtejustify\">т.д.</li>\n</ul>\n<p class=\"rtejustify\">Логика написания скрипта состоит в следующем. В зависимости от типа содержимого, скорости устаревания данных, доступного дискового пространства и т.д, выбираем оптимальное время хранения бекапов в каталогах. После этого необходимо &quot;пройтись&quot; по каталогах и удалить все файлы, которые созданы более чем N дней назад.</p>\n<p class=\"rtejustify\">Для поиска файлов, которые созданы более чем N дней назад, воспользуемся возможностями <a href=\"http://muff.kiev.ua/content/poisk-v-freebsd\">утилиты find</a>.</p>\n<p class=\"rtejustify\">Допустим, необходимо найти в каталоге все файлы, созданные более 25 дней назад:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td># <strong>find /backup/jun -type f -mtime +25</strong><br />\n /backup/jun/juniper.conf.gz_20150209_141842<br />\n /backup/jun/juniper.conf.gz_20150209_142441<br />\n /backup/jun/juniper.conf.gz_20150209_142733<br />\n /backup/jun/juniper.conf.gz_20150209_151936<br />\n /backup/jun/juniper.conf.gz_20150209_152555<br />\n /backup/jun/juniper.conf.gz_20150209_173457</td>\n</tr>\n</tbody>\n</table>\n<p>&nbsp;После поиска устаревших файлов, необходимо их удалить. Для этого можно использовать, например, такую конструкцию:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td><strong>find /backup/jun -type f -mtime +25 -exec rm -f {} \\;</strong></td>\n</tr>\n</tbody>\n</table>\n<p>&nbsp;Либо же такую:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td><strong>find /backup/jun -type f -mtime +25 -print0 | xargs -0 rm -f</strong></td>\n</tr>\n</tbody>\n</table>\n<p>Воспользуемся вторым вариантом и добавим несколько переменных. В результате получаем примерно следующий скрипт:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td style=\"background-color:rgb(51, 51, 51)\">\n<pre>\n<span style=\"color:#00FF00\"><strong>#!/bin/sh<span style=\"color:#00FFFF\"><strong>\n\n</strong></span># Путь к утилите поиска</strong></span><span style=\"color:#00FFFF\"><strong>\nFIND=&quot;</strong></span><span style=\"color:#FF0000\"><strong>/usr/bin/find</strong></span><span style=\"color:#00FFFF\"><strong>&quot;\n</strong></span><span style=\"color:#00FF00\"><strong># Путь к утилите удаления</strong></span><span style=\"color:#00FFFF\"><strong>\nRM=&quot;</strong></span><span style=\"color:#FF0000\"><strong>/bin/rm</strong></span><span style=\"color:#00FFFF\"><strong>&quot;\n</strong></span><span style=\"color:#00FF00\"><strong># Путь к утилите xargs</strong></span><span style=\"color:#00FFFF\"><strong>\nXARGS=&quot;</strong></span><span style=\"color:#FF0000\"><strong>/usr/bin/xargs</strong></span><span style=\"color:#00FFFF\"><strong>&quot;\n\n</strong></span><span style=\"color:#00FF00\"><strong># Список каталогов с архивами бекапов</strong></span><span style=\"color:#00FFFF\"><strong>\nPATH1=&quot;</strong></span><span style=\"color:#FF0000\"><strong>/backup/jun</strong></span><span style=\"color:#00FFFF\"><strong>&quot;\nPATH2=&quot;</strong></span><span style=\"color:#FF0000\"><strong>/backup/sw</strong></span><span style=\"color:#00FFFF\"><strong>&quot;\n\n</strong></span><span style=\"color:#00FF00\"><strong># Время хранения файлов (в днях)</strong></span><span style=\"color:#00FFFF\"><strong>\nTIME1=&quot;</strong></span><span style=\"color:#FF0000\"><strong>25</strong></span><span style=\"color:#00FFFF\"><strong>&quot;\nTIME2=&quot;</strong></span><span style=\"color:#FF0000\"><strong>60</strong></span><span style=\"color:#00FFFF\"><strong>&quot;\n\n</strong></span><span style=\"color:#00FF00\"><strong># Перебираем каталоги и удаляем устаревшие бекапы</strong></span><span style=\"color:#00FFFF\"><strong>\n$FIND $PATH1 -type f -mtime +$TIME1 -print0 | $XARGS -0 $RM -f\n$FIND $PATH2 -type f -mtime +$TIME2 -print0 | $XARGS -0 $RM -f</strong></span></pre></td>\n</tr>\n</tbody>\n</table>\n<p>Назовем его, например,&nbsp;<strong>remove_old_backups.sh</strong> и запустим на выполнение:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td># <strong>sh&nbsp;/usr/local/etc/remove_old_backups.sh</strong></td>\n</tr>\n</tbody>\n</table>\n<p>После этого проверим наличие файлов старше 25 дней в каталоге&nbsp;<strong>/backup/jun</strong>:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td>#&nbsp;<strong>find /backup/jun -type f&nbsp;-mtime +25</strong></td>\n</tr>\n</tbody>\n</table>\n<p>Таких файлов не обнаружено. А вот, для примера, файлы старше 20 дней - присутствуют:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td>#&nbsp;<strong>find /backup/jun -type f&nbsp;-mtime +20</strong><br />\n /backup/jun/juniper.conf.gz_20150210_124853<br />\n /backup/jun/juniper.conf.gz_20150212_145222<br />\n /backup/jun/juniper.conf.gz_20150212_151451<br />\n /backup/jun/juniper.conf.gz_20150212_151608<br />\n /backup/jun/juniper.conf.gz_20150213_033623<br />\n /backup/jun/juniper.conf.gz_20150213_033643<br />\n /backup/jun/juniper.conf.gz_20150213_033751<br />\n /backup/jun/juniper.conf.gz_20150213_113431</td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Скрипт работает... Модифицируем&nbsp;под свои нужды и пользуемся.</p>\n<p class=\"rtejustify\">По завершению редактирования, в&nbsp;целях безопасности, выставим необходимые права и разшешения (у меня файлы архивов пишутся от имени пользователя <strong>proftpd</strong>):</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td># <strong>chown <span style=\"color:#FF0000\">proftpd</span>:<span style=\"color:#FF0000\">proftpd</span> /usr/local/etc/remove_old_backups.sh</strong><br />\n #&nbsp;<strong>chmod 700 /usr/local/etc/remove_old_backups.sh</strong></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Ну и не&nbsp;забываем добавить ежедневный запуск скрипта&nbsp;в планировщик заданий:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td># <strong>echo &#39;# Clear old backups&#39; &gt;&gt; /etc/crontab</strong><br />\n #&nbsp;<strong>echo &#39;2 &nbsp; &nbsp; &nbsp; 6 &nbsp; &nbsp; &nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color:#FF0000\">proftpd</span></strong><strong>&nbsp;&nbsp;&nbsp; /bin/sh /usr/local/etc/remove_old_backups.sh&#39; &gt;&gt; /etc/crontab</strong></td>\n</tr>\n</tbody>\n</table>\n<p>&nbsp;</p>\n', created = 1767337383, expire = 1767423783, headers = '', serialized = 0 WHERE cid = '2:90eba0bc0b9fa97a265be8f058a73b9b' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:01ae698694af4ad0dfbc7c898784f237' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<pre>\nДобавлю свои 5 копеек\nДва однострочника для логов:\n1 для сжатия\n2 для подчистки за ним\n10 0 * * * find /var/log/host68/ \\( -name &#39;*&#39; -a ! -name &#39;*.gz&#39; \\) -type f -mtime +0 | xargs gzip -9\n10 0 * * * find /var/log/host68/ -name &#39;*.gz&#39; -mtime +60 | xargs rm</pre>', created = 1767337383, expire = 1767423783, headers = '', serialized = 0 WHERE cid = '2:01ae698694af4ad0dfbc7c898784f237' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:0aff59d553b3da1d9797f00eb1de5ec4' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>Раньше тоже так делал. Пока не пришло осознание, что лучше старый бекап, чем никакого. Все бывает, верно? И если по каким-то причинам бекап перестал выполняться, то find все также будет удалять файлы, пока не останется ни одного. При этом сообщение об ошибке при выполнении бекапа, например, на тот же email, также не помешает.</p>\n<p># remove old files<br />\n_SaveFilesCount=100<br />\n_AllFilesCount=`ls |wc -l`<br />\nif [ $_AllFilesCount -gt $_SaveFilesCount ]; then<br />\n&nbsp; &nbsp; &nbsp; &nbsp; let &quot;_RmFilesCount = $_AllFilesCount - $_SaveFilesCount&quot;<br />\n&nbsp; &nbsp; &nbsp; &nbsp; rm -f `ls -t |tail -$_RmFilesCount`<br />\nfi</p>\n', created = 1767337383, expire = 1767423783, headers = '', serialized = 0 WHERE cid = '2:0aff59d553b3da1d9797f00eb1de5ec4' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:337237d1337813718c7893112a74cae8' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>лучше старый бекап, чем никакого</p>\n<p>полностью согласен</p>\n<p>а можно коментарии к вашему скрипту, где что виполняется, т.к. я новичок и не все тут понимаю</p>\n', created = 1767337383, expire = 1767423783, headers = '', serialized = 0 WHERE cid = '2:337237d1337813718c7893112a74cae8' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:52f0b2da09de2e5465292a7ce675eb70' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>а чего не понятного то?<br />\nданный скрипт выполняется для текущей директории.<br />\n<i>_SaveFilesCount=100 # минимальное количество файлов, которое должно остаться.<br />\n_AllFilesCount=`ls |wc -l` # общее количество файлов в директории.<br />\nif [ $_AllFilesCount -gt $_SaveFilesCount ]; then # условие - если общее количество файлов больше чем минимальное то...<br />\n let \"_RmFilesCount = $_AllFilesCount - $_SaveFilesCount\" # вычисление количества удаляемых файлов.<br />\n rm -f `ls -t |tail -$_RmFilesCount` # собственно, получение _RmFilesCount последних элементов, сортированного по дате модификации, в порядке более старые в конце, списка файлов в директории и их удаление.<br />\nfi</i></p>\n<p>собственно только в данном виде скрипт не удобен для автоматизации. в начале следовало бы указать:<br />\n<i>_BackupDir=&lt;путь к директории></i></p>\n<p>и</p>\n<p><i>cd $_BackupDir</i><br />\nили же думаю лучше<br />\n<i>pushd $_BackupDir<br />\n&lt;основной текст скрипта><br />\npopd</i></p>\n', created = 1767337383, expire = 1767423783, headers = '', serialized = 0 WHERE cid = '2:52f0b2da09de2e5465292a7ce675eb70' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:e6984979be8d9ced4e98c135e5196b0e' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>Вам может и все понятно, а мне не все, топому и спрашивал. Спасибо за разжовывание.</p>\n', created = 1767337383, expire = 1767423783, headers = '', serialized = 0 WHERE cid = '2:e6984979be8d9ced4e98c135e5196b0e' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:8d8b33b1af878b51363fda698b944691' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>Ох, если бы этот скрипт еще был бы применим к Synology, цены б ему не было</p>\n<p>А так на сколько я понимаю с этим NASoм скрипт не имеет ничего общего :(</p>\n', created = 1767337383, expire = 1767423783, headers = '', serialized = 0 WHERE cid = '2:8d8b33b1af878b51363fda698b944691' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:07243fc0252056071eaa62af8c18d662' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtecenter\"><a class=\"thickbox\" href=\"/files/imagepicker/1/wake_up_ua.png\"><img alt=\"Вставай, Україно!\" class=\"imgp_img\" src=\"/files/imagepicker/1/thumbs/wake_up_ua.png\" style=\"height:200px; width:150px\" /></a></p>\n', created = 1767337383, expire = 1767423783, headers = '', serialized = 0 WHERE cid = '2:07243fc0252056071eaa62af8c18d662' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '3:cc913d232116f0426090404133377d88' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:d9a86123bfcbc57878743027b584400b' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtecenter\"><a href=\"http://muff.kiev.ua/rss.xml\"><img alt=\"RSS\" width=\"160\" height=\"60\" src=\"http://muff.kiev.ua/files/muf-rss.png\" /></a></p>\n', created = 1767337383, expire = 1767423783, headers = '', serialized = 0 WHERE cid = '2:d9a86123bfcbc57878743027b584400b' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '3:39649256b636e3d5ded656bc52bd8c01' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
Версия для печатиОтправить другуPDF version

Для бекапирования данных можно использовать как специализированное ПО, так и самописные скрипты.

В случае использования самописных скриптов, возникает необходимость периодически удалять архивы бекапов. Однако и этот процесс можно автоматизировать.

Попытаемся максимально приблизить условия к боевым.

Итак, имеется в наличии сервер, на котором в родительском каталоге (например, /backup) созданы подкаталоги, для хранения бекапов в зависимости от типа содержимого:

  • конфигурации маршрутизаторов
  • конфигурации коммутаторов
  • конфигурации серверов
  • данные с серверов
  • т.д.

Логика написания скрипта состоит в следующем. В зависимости от типа содержимого, скорости устаревания данных, доступного дискового пространства и т.д, выбираем оптимальное время хранения бекапов в каталогах. После этого необходимо "пройтись" по каталогах и удалить все файлы, которые созданы более чем N дней назад.

Для поиска файлов, которые созданы более чем N дней назад, воспользуемся возможностями утилиты find.

Допустим, необходимо найти в каталоге все файлы, созданные более 25 дней назад:

# find /backup/jun -type f -mtime +25
/backup/jun/juniper.conf.gz_20150209_141842
/backup/jun/juniper.conf.gz_20150209_142441
/backup/jun/juniper.conf.gz_20150209_142733
/backup/jun/juniper.conf.gz_20150209_151936
/backup/jun/juniper.conf.gz_20150209_152555
/backup/jun/juniper.conf.gz_20150209_173457

 После поиска устаревших файлов, необходимо их удалить. Для этого можно использовать, например, такую конструкцию:

find /backup/jun -type f -mtime +25 -exec rm -f {} \;

 Либо же такую:

find /backup/jun -type f -mtime +25 -print0 | xargs -0 rm -f

Воспользуемся вторым вариантом и добавим несколько переменных. В результате получаем примерно следующий скрипт:

#!/bin/sh

# Путь к утилите поиска
FIND="/usr/bin/find"
# Путь к утилите удаления
RM="/bin/rm"
# Путь к утилите xargs
XARGS="/usr/bin/xargs"

# Список каталогов с архивами бекапов
PATH1="/backup/jun"
PATH2="/backup/sw"

# Время хранения файлов (в днях)
TIME1="25"
TIME2="60"

# Перебираем каталоги и удаляем устаревшие бекапы
$FIND $PATH1 -type f -mtime +$TIME1 -print0 | $XARGS -0 $RM -f
$FIND $PATH2 -type f -mtime +$TIME2 -print0 | $XARGS -0 $RM -f

Назовем его, например, remove_old_backups.sh и запустим на выполнение:

# sh /usr/local/etc/remove_old_backups.sh

После этого проверим наличие файлов старше 25 дней в каталоге /backup/jun:

find /backup/jun -type f -mtime +25

Таких файлов не обнаружено. А вот, для примера, файлы старше 20 дней - присутствуют:

find /backup/jun -type f -mtime +20
/backup/jun/juniper.conf.gz_20150210_124853
/backup/jun/juniper.conf.gz_20150212_145222
/backup/jun/juniper.conf.gz_20150212_151451
/backup/jun/juniper.conf.gz_20150212_151608
/backup/jun/juniper.conf.gz_20150213_033623
/backup/jun/juniper.conf.gz_20150213_033643
/backup/jun/juniper.conf.gz_20150213_033751
/backup/jun/juniper.conf.gz_20150213_113431

Скрипт работает... Модифицируем под свои нужды и пользуемся.

По завершению редактирования, в целях безопасности, выставим необходимые права и разшешения (у меня файлы архивов пишутся от имени пользователя proftpd):

# chown proftpd:proftpd /usr/local/etc/remove_old_backups.sh
chmod 700 /usr/local/etc/remove_old_backups.sh

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

# echo '# Clear old backups' >> /etc/crontab
echo '2       6       *       *       *       proftpd    /bin/sh /usr/local/etc/remove_old_backups.sh' >> /etc/crontab

 

Ваша оценка: Нет Средняя: 4 (4 голоса)

Re: Скрипт удаления файлов старше N дней

Добавлю свои 5 копеек
Два однострочника для логов:
1 для сжатия
2 для подчистки за ним
10 0 * * * find /var/log/host68/ \( -name '*' -a ! -name '*.gz' \) -type f -mtime +0 |  xargs gzip -9
10 0 * * * find /var/log/host68/ -name '*.gz' -mtime +60 | xargs rm

Re: Скрипт удаления файлов старше N дней

Раньше тоже так делал. Пока не пришло осознание, что лучше старый бекап, чем никакого. Все бывает, верно? И если по каким-то причинам бекап перестал выполняться, то find все также будет удалять файлы, пока не останется ни одного. При этом сообщение об ошибке при выполнении бекапа, например, на тот же email, также не помешает.

# remove old files
_SaveFilesCount=100
_AllFilesCount=`ls |wc -l`
if [ $_AllFilesCount -gt $_SaveFilesCount ]; then
        let "_RmFilesCount = $_AllFilesCount - $_SaveFilesCount"
        rm -f `ls -t |tail -$_RmFilesCount`
fi

Re: Скрипт удаления файлов старше N дней

лучше старый бекап, чем никакого

полностью согласен

а можно коментарии к вашему скрипту, где что виполняется, т.к. я новичок и не все тут понимаю

Re: Скрипт удаления файлов старше N дней

а чего не понятного то?
данный скрипт выполняется для текущей директории.
_SaveFilesCount=100 # минимальное количество файлов, которое должно остаться.
_AllFilesCount=`ls |wc -l` # общее количество файлов в директории.
if [ $_AllFilesCount -gt $_SaveFilesCount ]; then # условие - если общее количество файлов больше чем минимальное то...
let "_RmFilesCount = $_AllFilesCount - $_SaveFilesCount" # вычисление количества удаляемых файлов.
rm -f `ls -t |tail -$_RmFilesCount` # собственно, получение _RmFilesCount последних элементов, сортированного по дате модификации, в порядке более старые в конце, списка файлов в директории и их удаление.
fi

собственно только в данном виде скрипт не удобен для автоматизации. в начале следовало бы указать:
_BackupDir=<путь к директории>

и

cd $_BackupDir
или же думаю лучше
pushd $_BackupDir
<основной текст скрипта>
popd

Re: Скрипт удаления файлов старше N дней

Вам может и все понятно, а мне не все, топому и спрашивал. Спасибо за разжовывание.

Re: Скрипт удаления файлов старше N дней

Ох, если бы этот скрипт еще был бы применим к Synology, цены б ему не было

А так на сколько я понимаю с этим NASoм скрипт не имеет ничего общего :(

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Вставай, Україно!

Литература

А "без окон, без дверей" по-английски будет "ноу Виндоус, ноу Гейтс"?