У меня есть сотня родственных каталогов в системе 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, путем индивидуального выполнения рабочего процесса для каждого родственного каталога.