Удалите самые старые файлы в папке, если комбинированный размер папки превышает 10 г

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

Что еще больше подтверждает этот ответ, так это то, что Windows может "обнаружить" его как устройство, но не может прочитать сам диск, и как Kali, так и Ubuntu видят ошибки ввода-вывода. (Проверьте lsusb, чтобы узнать, "определяется" ли устройство также, скорее всего, оно определяется, но встроенная память повреждена так, что флешку невозможно восстановить или использовать снова). Вполне вероятно, что накопитель больше не пригоден для использования.

Если у вас есть другая система (неважно, Windows или Linux), проверьте флэш-накопитель там. Если и в этой системе возникнут проблемы с доступом к данным на диске (не удается определить тип раздела, ошибки ввода-вывода и т.д.), то, скорее всего, проблема, указанная здесь, - флэш-накопитель поврежден и больше не пригоден для использования.

0
09.08.2018, 15:53
3 ответа

В системе 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
4
28.01.2020, 02:15

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

Вариант 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
1
28.01.2020, 02:15

Как насчет

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

?

1
28.01.2020, 02:15

Теги

Похожие вопросы