"Несанкционированное" удаление в sh

Языки программирования, IDE, компиляторы, интерпретаторы, гипервизоры и виртуальные среды
Правила форума
Как правильно задавать вопросы Правильно сформулированный вопрос и его грамотное оформление способствует высокой вероятности получения достаточно содержательного и по существу ответа. Общая рекомендация по составлению тем: 1. Версия ОС вместе с разрядностью. Пример: LM 18.1 x64, LM Sarah x32 2. DE. Если вопрос касается двух, то через запятую. (xfce, KDE, cinnamon, mate) 3. Какое железо. (достаточно вывод inxi -Fxz в спойлере (как пользоваться спойлером смотрим здесь)) или же дать ссылку на hw-probe 4. Суть. Желательно с выводом консоли, логами. 5. Скрин. Просьба указывать 1, 2 и 3 независимо от того, имеет ли это отношение к вопросу или нет. Так же не забываем об общих правилах Как пример вот
Аватара пользователя

Автор темы
madesta
Сообщения: 197
Зарегистрирован: 11 июн 2017, 18:47
Решено: 6
Откуда: Минск, BY
Благодарил (а): 19 раз
Поблагодарили: 46 раз

"Несанкционированное" удаление в sh

Сообщение madesta » 01 фев 2019, 14:13

В целях автоматизации был создан sh для удаления контента старше 3 суток.

Так как бывает, что файлы с большим значением mtime перемещаются в другие созданные позднее папки (т.е. с более "молодым" значением mtime), то после удаления их содержимого данная более новая папка остаётся неудалённой. Поэтому дополнительно производится поиск таких пустых папок с их последующим удалением.

Код: Выделить всё

D1=/home/user/Exchange/H-5
D2=/home/user/Exchange/Reports
date=`date '+%d'`
filecount=`find $D1 -type f | wc -l`
if [ $filecount -eq 0 ];
then
:
else
find $D1 -mtime +3 > $D2/$date.H-5.txt
find $D1 -mtime +3 -delete
fi
dircount=`find $D1 -type d -empty | wc -l`
if [ $dircount -eq 0 ];
then
:
else
find $D1 -empty -delete
fi
Однако по протоколам данных, подлежащих удалению (D2), было замечено, что два раза была удалена и папка, в которой осуществляется поиск (D1), в результате чего в предпоследней строке был вынужден исключить её из поиска:

Код: Выделить всё

find $D1 ! -name 'H-5' -empty -delete
Не могу понять, в чём подвох или что неправильно в find $D1 -empty -delete. Может быть кто подскажет?

Вернуться в «Программирование, скриптинг, виртуализация»