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

Я работаю в каталоге ~/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 но я не совсем уверен, как это сделать.

  • Как исключить каталоги с пробелами через PRUNEPATHS локатора?
  • Как найти и заменить текст geany во всех файлах в каталоге?
  • Найдите файл хранилища ключей, содержащий конкретный SHA-1
  • Настройка прав доступа к файлам в сценарии bash
  • Как найти значение из выражения
  • найти и заменить макрос в libreoffice
  • Как отслеживать, какие файлы в настоящее время растут в каталоге
  • Неверное поведение xargs
  • 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 - лучшая ОС в мире.