У меня много пользователей в /home .
У каждого пользователя есть определенное количество каталогов с большими размерами.
Я извлек список пользователей, созданных в системе, в текстовый файл без системных пользователей (uid ниже 1000). Например, root, ftp и другие системные пользователи не находятся в usernames-list.txt

Есть ли способ, которым мы можем позволить find найти этот список usernames-list.txt и получить доступ к его /home/ каталогам, основываясь на этих двух условиях, можно выполнить rm -rf?

условие 1: список файлов / каталогов с датой изменения / доступа старше 6 месяцев.
условие 2: список файлов / каталогов размером +50 МБ.

выполнить: rm -f

1 ответ1

0

При этом будут перечислены все каталоги с файлами со временем доступа более 180 дней и размером более 50 МБ.

for name in $(cat usernames.txt); do
find /home/"$name" -type f -atime +180 -size +50M|sed 's/\/[^/]\+$//'|sort -u
done

Для удаления я добавил xargs после sort .

В моем собственном / моем доме у меня есть несколько папок с пробелами и одинарными кавычками в названии (в мою защиту, некоторые mp3-файлы :)). xargs напечатал предупреждение о и сказал мне добавить опцию -0 , и чтобы исправить нулевой символ, я добавил опцию разделителя -d'\n' .

for name in $(cat usernames.txt); do
find /home/"$name" -type f -atime +180 -size +50M|sed 's/\/[^/]\+$//'|sort -u|xargs -0 -d'\n' -n1 -I{} echo -rf "{}"
done

Если вам кажется, что все в порядке, вы можете заменить echo на rm в команде xargs .

Может быть, rm напечатает сообщения об ошибках, потому что некоторый родительский каталог будет удален перед некоторым подкаталогом.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .