Сценарий Bash - необходимо удалить файлы из каталога, пока размер каталога не станет меньше 8 ТБ.

Ниже приведен сценарий высокого уровня, для которого мне нужно создать сценарий bash.

  • Каталог на сервере - /sasdata2/SAS-USERS/PBU/
  • Размер указанного выше каталога не должен превышать 8 ТБ.
  • Если размер превышает 8 ТБ, необходимо удалить самые старые файлы по дате создания/изменения, чтобы уменьшить размер до 8 ТБ.
  • Несколько подкаталогов в этом основном каталоге, но ничего не следует удалять из подкаталогов. Удалить можно только файлы в основном каталоге.

Ниже приведен скрипт, который я использую, но он зацикливается на операторе while. Нужна ваша помощь в создании сценария для вышеуказанного сценария.

while [ "$(du -shb /sasdata2/SAS-USERS/PBU | awk '{print $1}')" -gt 900 ]
do
  find /sasdata2/SAS-USERS/PBU -maxdepth 0 -type f -printf '%T@\t%p\n' | \
  sort -n | head -n 25 | cut -d $'\t' -f 2-  | xargs -d '\n' rm -f
done

person Sameer Qayyum    schedule 16.02.2016    source источник
comment
Если подкаталоги, к которым нам не разрешено прикасаться, превышают 8 ТБ, цикл не может завершиться.   -  person tripleee    schedule 16.02.2016
comment
Почему это должен быть Баш? В отличие, скажем, от Perl или Python?   -  person Toby Speight    schedule 16.02.2016
comment
Задумывались ли вы о том, чтобы сжать некоторые файлы ваших пользователей, а не удалять их произвольно? Кстати, поскольку путь к файлам ваших бедных пользователей SAS появляется в вашем скрипте более одного раза, вам следует подумать о том, чтобы поместить его в переменную.   -  person Mark Setchell    schedule 16.02.2016


Ответы (1)


Я думаю, что ваше условие while неверно. du -b даст вам байты, почему по сравнению с 900?

Кроме того, зачем вам зацикливаться на du и удалять произвольные 25 файлов? подсчитайте с помощью du, сколько байтов у вас превышает 8 ТБ, затем ls -ltr и в цикле удалите файлы и суммируйте их размер, пока не достигнете байтов

person Eran Ben-Natan    schedule 16.02.2016
comment
Привет, Эран, я тестировал его в папке и удалял файлы размером более 900 байт. Я попробую этот подход и дам вам знать, как он идет. Спасибо за вашу помощь. - person Sameer Qayyum; 17.02.2016