Команда для удаления каталогов, содержимое которых меньше заданного размера

Я работаю в каталоге ~/foo который имеет подкаталоги

 ~/foo/alpha ~/foo/beta ~/foo/epsilon ~/foo/gamma 

Я хотел бы выпустить команду, которая проверяет общий размер под каждым поддиректорией уровня 1 ~/foo и удаляет каталог вместе с его содержимым, если размер находится под заданной суммой.

Итак, скажем, я хотел бы удалить каталоги, содержимое которых меньше 50K . Выдача $ du -sh */ возвращает

 8.0K alpha/ 114M beta/ 20K epsilon/ 1.2G gamma/ 

Я бы хотел, чтобы моя команда удаляла ~/alpha и ~/epsilon вместе с их содержимым. Есть ли такая команда? Я подозреваю, что это можно сделать с find но я не совсем уверен, как это сделать.

  • Как выполнить поиск с помощью GNU для нескольких типов файлов за раз?
  • Извлечение файлов в текущий каталог
  • Файлы размером более 1 ГБ и старше 6 месяцев
  • GUI для поиска, который может показывать миниатюры видео
  • Найти все измененные файлы svn и скопировать файлы, измененные в одной структуре папок
  • найти команду для новейших 500 файлов в дереве каталогов, а также быть совместимым с POSIX
  • Как искать все файлы SUID / SGID?
  • Переписывание файлов, найденных поиском?
  • 2 Solutions collect form web for “Команда для удаления каталогов, содержимое которых меньше заданного размера”

    С GNU find и GNU coreutils , и если ваши каталоги не имеют новых строк в их именах:

     find ~/foo -mindepth 1 -maxdepth 1 -type d -exec du -ks {} + | awk '$1 <= 50' | cut -f 2- 

    Это приведет к отображению каталогов с общим содержимым, меньшим 50K. Если вы довольны результатами и хотите их удалить, добавьте | xargs -d \\n rm -rf | xargs -d \\n rm -rf до конца командной строки.

    Первый ответ работает хорошо, но не с именем dir, которое содержит пробелы. (исправленная логика, потому что это было что-то 50Kb или более)

     #RESULTTODELETE=$(find ~/foo -mindepth 1 -maxdepth 1 -type d -exec du -ks {} + | awk '$1 <= 50' | cut -f 2-); RESULTTODELETE2=$(echo "$RESULTTODELETE" | sed 's, ,\\ ,g'); echo "$RESULTTODELETE2" | xargs rm -rf 

    Будет работать с:

     ~/f oo/a lpha ~/fo o/be ta ~/foo/ep silon ~/foo/gamma 
    Linux и Unix - лучшая ОС в мире.