Intereting Posts
Есть ли шанс исправить двойную загрузку, не нужно включать и выключать UEFI для переключения ОС? Удалить строки, содержащие пустые поля Есть ли эквивалент addr2line в системе AIX? Pamd больше не монтирует диск ecryptfs с момента обновления Команда ls – определяет количество столбцов Grep 2 разных требования в одном заявлении командной строки Поиск файлов, которые пользователь не может прочитать? Есть ли способ остановить скринсейвер только на клавиатуре? Как заставить команду sed искать только полные слова? Как удалить список недавно полученных документов в Fedora? получить переданные аргументы и поместить их в массив Как получить команду find и rename для работы с подкаталогами? Печатать строки, в которых первое поле имеет только четыре символа, используя регулярное выражение в awk? sed удалить все, кроме первой и последней строки из многих файлов cUrl: слишком длинный список аргументов

Удалите самые старые файлы в папке, если общий размер папки превышает 10 ГБ.

Следующий синтаксис удалит файлы в папке hive :

 /usr/bin/find /var/log/hive -type f -print -delete 

Я пытаюсь сделать следующее:

Удалите самые старые файлы из /var/log/hive только если размер папки превышает 10G

ПРИМЕЧАНИЕ. Процесс удаления будет остановлен, когда размер в папке куста равен 10 ГБ, поэтому процесс очистки начнется, если размер больше 10 ГБ.

Можем ли мы создать это решение с помощью команды поиска или, может быть, другим подходом?

В системе GNU вы можете сделать что-то вроде:

 cd /var/log/hive && find . -type f -printf '%T@ %b :%p\0' | sort -zrn | gawk -v RS='\0' -v ORS='\0' ' BEGIN {max = 10 * 1024 * 1024 * 1024} # 10GiB; use max=10e9 for 10GB {du += 512 * $2} du > max { sub("[^:]*:", ""); print }' | xargs -r0 echo rm -f 

Это сортирует обычные файлы по времени последней модификации (от самого нового к старому), затем подсчитывает их совокупное использование диска (здесь предполагается, что нет жестких ссылок) и удаляет каждый файл, когда мы преодолели порог 10 ГБ.

Обратите внимание, что он не учитывает размер самих файлов каталога. Он учитывает только использование диска обычными файлами.

Уберите echo когда будете удовлетворены результатом.

На одной строке:

 find . -type f -printf '%T@ %b :%p\0' |sort -zrn|gawk -vRS='\0' -vORS='\0' '{du+=512*$2};du>10*(2^30){sub("[^:]*:","");print}'|xargs -r0 echo rm -f 

Чтобы удалить только файлы * .wsp, когда совокупное использование диска всеми обычными файлами превышает 10 ГБ, сначала вы должны перечислить файлы, не относящиеся к wsp. И в то же время мы можем также учитывать использование диском каталогов и других нестандартных файлов, которые мы пропустили ранее:

 cd /var/log/hive && find . \( -type f -name '*.wsp' -printf WSP -o -printf OTHER \) \ -printf ' %T@ %b :%p\0' | sort -zk 1,1 -k2,2rn | gawk -v RS='\0' -v ORS='\0' ' BEGIN {max = 10 * 1024 * 1024 * 1024} # 10 GiB {du += 512 * $3} du > max && $1 == "WSP" { sub("[^:]*:", ""); print }' | xargs -r0 echo rm -f 

Попробуй это,

Вариант 1: удалить папку старше 90 дней и более 10G

 find /var/log/hive -size +10G -mtime +90 -type f -print -delete 

Вариант 2: удалить самую старую папку

 find /var/log/hive -size +10G -type f -printf '%T+ %p\n' | sort | head -n 1 | cut -d" " -f2 | xargs rm 

Как насчет

 while test "$(du -s /var/log/hive | cut -f1)" -gt 10000000 ; do rm -i /var/log/hive/"$(ls -t /var/log/hive | tail -1)" ; done 

?