Как найти маленькие непустые папки?

Как найти маленькие непустые папки?

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

Я пробовал с:

find -type d -size -500k \;

Но он также показывает папки, содержащие файлы большего размера.

find -type d -size -500k -exec du {} \;

показывает правильный размер.

Как изменить команду find, чтобы отображались только папки размером меньше N?

решение1

Одна команда, которую я использую, если вам не нужно напрямую передавать это в другой скрипт, это

du . | сортировка -rn

Это поместит самые маленькие папки в конец печатного списка вместе с их размерами. Потребуется немного больше работы, чтобы отфильтровать те, которые больше.

решение2

Если вы просто хотите удалить папки, содержащие менее N байт, подойдет следующая однострочная команда:

du | awk '$1 <= 500 { print "rm -rf \"" substr($0, length($1)+2) "\""}' | sh

Что это делает? Последовательно:

  • duвыводит размеры каталогов вместе с их путями
  • $1 <= 500условие, которое проверяет, меньше ли первый столбец 500 (если он меньше 500 байт)
  • printв awk печатаетrm -rf "/path/to/small/dir"
  • | shперенаправляет его в sh, чтобы его можно было выполнить

Это также можно сделать с помощью xargs вместо передачи в sh, но я привык к этому способу.

Связанный контент