
Я хотел бы найти (позже удалить) все папки с музыкой, которые почти пусты (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, но я привык к этому способу.