Tente:
find . \! \( -wholename "./build/*" -o -wholename ./build \) -delete
Se você executar:
rm -rf /tmp/tmp2
mkdir /tmp/tmp2
cd /tmp/tmp2
mkdir -p build module/build source
touch .hidden build/abc build/abc2 source/def module/build/ghi
find . \! \( -wholename "./build/*" -o -wholename ./build \) -delete
find .
sua saída será:
./build
./build/abc
Isso é muito mais seguro do que tentar analisar a saída de ls
, em que você precisa cuidar de nomes de arquivos ou diretórios com espaços ou, pior ainda, com novas linhas incorporadas, find
manipula os corretamente.