вторник, 9 апреля 2019 г.

Очистка объектов Корзины старше N дней через bash


Данная публикация является продолжением более ранней, опубликованной под наименованием "Об автоматизации очистки Корзины в Linux или "страсти" по очистке Корзины через терминал" (https://onformix.blogspot.com/2018/01/trashclean.html).

На тот момент не хватило знаний для реализации последнего пункта "А если необходимо удалить содержимое Корзины только старше N дней?" через скрипт на bash. Но эта нерешённая задача постоянно стимулировала к поиску вариантов её реализации, несмотря на то, что были найдены такие инструменты как autotrash и trash-cli.

Этот процесс напоминал абзац из произведения Пола Андерсона "Патруль времени":

Дорогой мой, вы же ещё ни с чем не управились! Для вас и для меня, с точки зрения нашего индивидуального биологического времени, эту  работу ещё предстоит сделать. И не думайте, пожалуйста, что успех предрешён,  раз он зафиксирован в истории. Время эластично, а  человек обладает свободой воли. Если вы потерпите неудачу, история изменится. Упоминание о вашем успехе пропадёт из её анналов, а моего рассказа об этом успехе не будет. Именно так это и происходило в тех считанных эпизодах, когда Патруль терпел поражение. Работа по этим делам всё ещё ведется, и если там достигнут наконец успеха, то история изменится и окажется, что  успех  был как бы "всегда". Tempus non nascitur, fit [время не рождается само собой, а делается (лат.)], если можно так выразиться.

Решение этой задачи оказалось частным случаем реализации другой – удаления файлов/папок через N дней через скрипт bash.

Можно даже сказать, что они почти идентичны за исключением того, что файл отчёта с перечнем окончательно удалённых объектов из Корзины приводится в более "читабельный" вид, так как перед именем каждого из удалённых объектов указывается ещё и путь /home/user/.local/share/Trash/files/, что делает его не совсем удобным для восприятия.

В процессе очистки от объектов старше N дней используются понятия о структуре Корзины и методике поиска удаления через связку команд find и -delete, которые описаны здесь и здесь.

В процессе генерации отчёта об удалённых объектах, который имеет в скрипте наименование Trash.txt к имени указанного файла добавляются дата удаления (месяц.день) и наименование компьютера H-3. А старые файлы отчёта старше установленного времени очистки Корзины (N) удаляются через N+2 дней.

В приводимом примере N устанавливается равным 3.

Результатом является следующее:

#!/bin/bash
D1=/home/user/.local/share/Trash/files
D2=/home/user/.local/share/Trash/info
D3=/home/user/Reports
file=`find $D1 -type f | wc -l`
if [ $file -eq 0 ];
then
:
else
date=`date '+%m.%d'`
find $D1 -mtime +3 > $D3/Trash-ini.txt
find $D1 -mtime +3 -delete
find $D2 -mtime +3 -delete
fi
str=/home/user/.local/share/Trash/files/
while read LINE; do
echo "${LINE##*$str}"
done < $D3/Trash-ini.txt | tee $D3/$date.H-3.Trash.txt
rm $D3/Trash-ini.txt
dir=`find $D1 -type d -empty | wc -l`
if [ $dir -eq 0 ];
then
:
else
find $D1 ! -name 'files' -empty -delete
fi
file=`find $D3 -name *.H-3.Trash.txt -mtime +5 | wc -l`
if [ $file -eq 0 ];
then
:
else
find $D3 -name *.H-3.Trash.txt -mtime +5 -delete
fi
file=`find $D3 -name *.H-3.Trash.txt -empty | wc -l`
if [ $file -eq 0 ];
then
:
else
find $D3 -name *.H-3.Trash.txt -empty -delete
fi
exit

Комментариев нет:

Отправить комментарий