Вы должны быть очень осторожны при выполнении рекурсивного поиска для bin
и obj
... например, вы можете случайно выскочить из важных файлов или каталогов (например: .../.hg/store/data/obj
), что не будет хорошей идеей.
Там, где это возможно, вы хотите быть максимально точным. Если вы пытаетесь удалить каталоги, укажите -type d
чтобы случайно не найти файл / символическую ссылку / etc ...
Кроме того, он достаточно велик, поэтому было бы полезно иметь набор функций для удобочитаемости / удобства обслуживания.
Этот набор функций (и, наконец, конвейер, который можно связать / поместить в функцию) удалит все каталоги bin
и obj
которые находятся рядом с файлом с именем makefile
(все без учета регистра).
Всего байтов будет записано в stderr
с помощью shy numfmt
для получения вывода, такого как « 9.1MB
»
function getMakefiles {
find . -type f -iname makefile
}
function getBinObjDirsNear {
while read NEAR; do
find $(dirname ${NEAR}) -type d -maxdepth 1 \( -iname bin -o -iname obj \)
done
}
function calcTotal {
TOTAL=0
while read ENT; do
TOTAL=$(( TOTAL + $(du -bc ${ENT} | tail -n 1 | cut -f 1) ))
echo ${ENT}
done
numfmt --to=iec --suffix=B --format="%f" ${TOTAL} >&2
}
getMakefiles | getBinObjDirsNear | calcTotal | xargs -d '\n' rm -rf