2016-02-16 4 views
0

Ниже приведен сценарий высокого уровня, для которого мне нужно создать сценарий bash.Bash Script - нужно удалить файлы из каталога до размера каталога меньше 8 ТБ

  • Каталог на сервере - /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 '%[email protected]\t%p\n' | \ 
    sort -n | head -n 25 | cut -d $'\t' -f 2- | xargs -d '\n' rm -f 
done 
+2

Если подкаталоги, которым мы не разрешаем касаться, больше 8 ТБ, это не путь для завершения цикла. – tripleee

+0

Зачем нужно быть Bash? В отличие от, скажем, Perl или Python? –

+0

Думали ли вы о том, чтобы сжать некоторые файлы ваших пользователей, а не произвольно их удалять? Кстати, поскольку путь к вашим бедным файлам пользователей SAS появляется более одного раза в вашем скрипте, вы должны рассмотреть вопрос о его переносе в переменную. –

ответ

1

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

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

+0

Привет, Eran, я тестировал его в папке и удалял файлы размером более 900 байт. Я попробую этот подход и дам вам знать, как это происходит. Спасибо за вашу помощь. –