Aqui está minha opinião sobre isso:
#! /bin/bash
SPECIAL_FILE=DONOTDELETE
LOGFILE=clean.$(date +"%Y-%d-%m.%H%M%S").log
FIND_BASE="$1"
if [ $# -ne 1 ]; then
echo "Syntax $(basename $0) <FIND_BASE>"
exit 1
fi
if [ "$FIND_BASE" = "." ]; then
FIND_BASE=$(pwd)
else
FIND_BASE=$(pwd)/$FIND_BASE
fi
for d in $(find $FIND_BASE -type d -print); do
if [ "$d" != "$FIND_BASE" ]; then
ls $d | grep $SPECIAL_FILE &> /dev/null
if [ $? -ne 0 ]; then
echo "Deleting $d" | tee -a $LOGFILE
rm -rf $d 2>/dev/null
else
echo "Ignoring $d, contains $SPECIAL_FILE" | tee -a $LOGFILE
fi
fi
done
exit 0
Adicione isso a um script, modifique as variáveis com sua própria convenção de nomenclatura, se desejar (para o arquivo especial e o nome do log), e, em seguida, chame-o apenas com o caminho do diretório inicial como um parâmetro. Ele excluirá qualquer diretório que contenha o arquivo desejado e excluirá todo o resto.