Удалять файлы старше 30 дней, но в 1 директории срок хранения 6 месяцев. - PullRequest
1 голос
/ 30 сентября 2019

Я хотел бы создать находку, которая удалит файлы старше 30 дней, но у меня есть 1 каталог, в котором срок хранения должен составлять 6 месяцев.

Как это возможно?

Это приведет к удалению всех файлов во всех подкаталогах, которые старше 30 дней, если я прав.

/bin/find /root/script/* -type f -ctime +30 -exec rm {} \;

Как мне установить, что этот каталог требует другого хранения:

/root/script/owner

Ответы [ 2 ]

1 голос
/ 30 сентября 2019

Вы можете исключить / root / script / owner из результатов поиска, используя -path или -regex в сочетании с '!'чтобы отменить тест

find /root/script -type f -ctime +30 '!' -path '/root/script/owner/*' -exec rm {} \;
OR
find /root/script -type f -ctime +30 '!' -regex '/root/script/owner/.*' -exec rm {} \;

Затем выполните пользовательское удаление в специальной папке

find /root/script/owner -type f -ctime +180 -exec rm {} \;
0 голосов
/ 30 сентября 2019

Вы можете объединить несколько операторов, чтобы они ограничивали то, что включено. Вы на самом деле уже делаете это, потому что у вас есть -type и -ctime, соединенные с неявным AND.

, который вам нужно добавить, это regex, и выможет сделать что-то вроде:

/bin/find /root/script/* -type f ! -regex '/root/script/owner/.*' -ctime +30 -exec rm {} \;

Это должно исключить файлы в этом конкретном дереве, так как ! -regex будет ложным для них. Основная идея заключается в том, что к дальнейшим операциям будут применяться только те, которые соответствуют всем условиям.

В этом случае любые нестандартные файлы будут исключены. Из других, любые, которые не соответствуют регулярному выражению, будут исключены. Из оставшихся мы выбросим все, которые не соответствуют 30-дневному требованию. Все, что осталось, будет обработано rm.

Оставшийся каталог, конечно, будет выполнен с большим временем:

/bin/find /root/script/owner -type f -ctime +186 -exec rm {} \;
...