Назад | Перейти на главную страницу

Найти и удалить все файлы, кроме N самых больших, в сотнях каталогов

У меня есть сотня родственных каталогов в системе BSD / Unix, в каждом из которых есть набор файлов. Я хочу удалить все файлы, кроме N самых больших в каждом каталоге. (N для меня 5.)

Предполагая, что я могу использовать для этого некоторую магию поиска, но не совсем уверен, как это сделать.

Попробуйте запустить эту команду, думаю, вам понравится

find /path/to/dir -type f -print0 | xargs -0 du -s | sort -rn | awk 'NR>5 {print $NF}' | xargs rm -f

Это напечатает все файлы под /path/to/dir каталог, вычислить размер каждого файла, отсортировать по размеру, извлечь имена всех (кроме 5 верхних) файлов и передать их в rm.

Чтобы выполнить это для каждого каталога индивидуально, вам лучше обернуть его скриптом, например

#!/bin/bash

for DIR in `find /path -maxdepth 1 -type d`
do
    find ${DIR} -type f -print0 | xargs -0 du -s | sort -rn | awk 'NR>5 {print $NF}' | xargs rm -f
done

куда /path - это родительский каталог, содержащий все ваши родственные каталоги. Это выполнит то же самое, что описывает @TomNewton, путем индивидуального выполнения рабочего процесса для каждого родственного каталога.